c++编程的字符集及其转换
一.两种字符集
多字节字符集(MBCS):因为计算机最早是在英语国家诞生的,大多数英文信息是由英文字母、数字以及一些其它字符构成了一个128个字符的ASCII字符集。本来这对于英语国家来说够用了。但是随着计算机的普及,非英语国家的文字字符也需要用计算机来存储,这时字符集就需要一种扩展机制了。一种简单的扩展机制就是兼容ASCII字符集,在后面加上自己的编码。可以想象,不同字符的编号长度是不一样的,有些是两个字节,有些是三个字节甚至四个字节等等。这样的字符集就叫多字节字符集。多字节字符集就是多种字符集的统称,比如中文字符集GB2312和GBK、日文编码JIS都是多字节字符集.些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码
UNICODE(万国码):由于多字节字符遵循的是各个国家的编码,要进行信息交换必须进行繁琐的转换。这时就有人想:有没有一种编码规则,能给全世界的字符都编上统一的编号呢?就这样unicode字符集诞生了。unicode字符集顾名思义就是每个字符都有一个唯一的编码。最早的unicode字符是采用两个字节也是16位对字符进行编码(也就是能够对65536个字符进行编号),故被称为utf-16。后来发现大多信息都是英文构成的,为了节省空间,同时为了兼容单字节的处理系统,就出现了一种变种的unicode字符集——utf8。utf8的实现原理和多字节字符集一样,前面是128个子符是ASCII字符,后面的采用变长的编码方式,就是一个字符可能用两个字节、三个字节或四个字节进行编码。再到后面发现16位的编码也不够用了,采用32位编码,这样就出现了utf-32:
二.c++中的常见的数据类型
char 是C语言标准数据类型,字符型。通常由编译器决定一个char对象有多少个字节组成,一般是一字节。(ansi字符集)
LPSTR(char*) LPCSTR(const char*)
wchar_t 是char的Unicode版本。相当于 unsigned short。一般两个字节。(unicode字符集)
LPWSTR(wchar_t*) LPCWSTR(const wchar_t*)
CHAR 参照定义: typedef char CHAR;
WCHAR 参照定义:typedef wchar_t WHAR;
TCAHR 通用版字符类型:在ANSI编译方式下为 char , 在Unicode 编译方式下为 wchar_t(这种是一种通用型的字符集,在不同的字符系统中有不同的作用,wcsxxxx是unicode版本的操作函数) LPTSTR(CHAR*)
CString 类是微软的visual c++提供的MFC里面的一个类,所以只有支持MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用标准C++中的 string类了。另外,因为string类是在c++标准库中,所以它被封装在了std命名空间中,使用之前需要声明using namespace std;而CString类并不在std命名空间中,因为它不是c++的标准库,只是微软的一个封装库。这点看来用string类的程序的移植性更好。
三.数据类型之间的转换
万能的转换方法:TEXT(),这种方法会检测系统现在的字符集然后自动的做出编码的选择.
ANSI转换为宽字节:可以在字符串的前面加上"L";或是_T()
cstring和char*的相互转换:
cstring->char*:
CString a=L"HAH";
CStringA temp=str;
char * pp=temp.GetBuffer();
char*->cstring:直接用cstring的构造函数即可:a=CString("hahha");
string 和cstring 要以char*为桥梁!!
c++编程的字符集及其转换的更多相关文章
- iconv简介(1、字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2、编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有linux等)
iconv简介(1.字符串|文件字符转换:iconv用于将一种已知的字符集文件转换成另一种已知的字符集文件)(2.编程语言函数功能的相似性:iconv不仅再php中有用,而且c语言中也有用,还有lin ...
- python字符集的转换(mysql数据乱码的处理)
本文参考:http://blog.csdn.net/crazyhacking/article/details/39375535 chardet模块:http://blog.csdn.net/tianz ...
- windows 编程—— 宽字符集 与 Unicode
目录: 从ASCII码 到 Unicode Windows 编程中的 "字符” 定义 (如何在windows下进行通用编码) 常用的通用函数,定义 (本文为学习<Programming ...
- [转]Linux下转换字符集(UTF8转换)
今天在Linux 下使用 Iconv 命令转换一个UTF8文件时,总是转换不成功.提示: iconv: 未知 0 处的非法输入序列 后来使用 man iconv 查看,还是没发现异常,因为命令格式都是 ...
- Java编程之字符集问题研究
1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...
- 字符集(编码)转换_Linux
ZC: 来自 我的项目 czgj 1.代码: #include <stdio.h> #include <iconv.h> #include <string.h> / ...
- 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值
第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...
- 中国MOOC_零基础学Java语言_第1周 计算_第1周编程题_1温度转换
第1周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将 ...
- 学习响应式编程 Reactor (4) - reactor 转换类操作符(1)
Reactor 操作符 数据在响应式流中的处理,就像流过一条装配流水线.Reactor 既是传送带,又是一个个的装配工或机器人.原材料从源头(最初的 Publisher )流出,经过一个个的装配线中装 ...
随机推荐
- node 笔记整理
node 合并多个请求的数据 function getList1(num) { var url= "netease/search?keyword=独孤天下&type=song& ...
- Flume原理分析与使用案例
1.flume的特点: flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并写到各种数据 ...
- 2019牛客暑期多校训练营(第五场)- B generator 1 (齐次线性递推+矩阵快速幂)
题目链接:https://ac.nowcoder.com/acm/contest/885/B 题意:已知齐次线性式xn=a*xn-1+b*xn-2,已知a,b,x0,x1,求xn,n很大,n<= ...
- PAT A1011 World Cup Betting(20)
AC代码 #include <cstdio> #include <algorithm> const int max_n = 3; using namespace std; /* ...
- DEDE升级5.7版本后生成页面空白_解…
今天将DEDECMS V5.6升级到DEDECMS V5.7并升级5.7 SP1后,发现生成首页.栏目.内容页均为空白,没有任何反应,今天发布一个解决方法. 发现每个模板中调用过 Html2Text ...
- Python基础『二』
目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...
- redis发布订阅者
发布者pub.py import redis conn = redis.Redis(host='127.0.0.1', decode_responses=True) conn.publish(') 订 ...
- Jmeter之Plugin插件,服务器监控
Jmeter Plugins插件 我在测试工作中:主要使用了监听器中的图表报告和监控服务器CPU,内存(这篇博文就是对插件的安装,以及jmeter怎么监控服务器CPU~) 1.下载安装Plugins插 ...
- IIS--解决64位系统IIS网站发布出现未能加载文件或程序集“...”或它的某一个依赖项。试图加载
解决64位系统IIS网站发布出现未能加载文件或程序集“...”或它的某一个依赖项.试图加载 ASP.NET MVC 项目发布的在本地IIS后,启动网站出现未能加载文件或程序集“…”或它的某一个依赖项. ...
- 【原创】大数据基础之Logstash(6)mongo input
logstash input插件之mongodb是第三方的,配置如下: input { mongodb { uri => 'mongodb://mongo_server:27017/db' pl ...