1.Unicode字符集

原本标准字符集为8位的ASCII码,但世界上的书写语言不能简单地用256个8位代码即一字节表示,就试更宽的值,例如16位值。这就是Unicode非常简单的原理。与混乱的256字符代码映射,以及含有一些单字节代码和一些双字节代码的双字节字符集不同,Unicode是统一的16位系统,这样就允许表示65536个字符。在这里会高兴地告诉你前128个Unicode字符(16位代码从0x0000到0x007F)是ASCII码,而接下来的128个Unicode字符(代码从0X0080到0X00FF)是ISO 8859-1对ASCII的扩展。Unicode中不同部分的字符都同样基于现有的标准。
    Unicode对表示所有字符及世界上使用象形文字的语言,包括一些列的数字、符号和货比的集合来说用16位来表示是充裕的,因此Unicode包含了世界上所有的字母、符号、数字以及中文等在内的字符。

Unicode有缺点吗?当然有。Unicode字符使用固定的16位存储,其字符串占用的内存是ASCII字符串的两倍,因为本地程序及文件常需要压缩存储。
宽字符不需要Unicode,Unicode是一种可能的宽字符编码。

2.多字节字符集

由于有些符号用8位即一个字节就可以表示,若使用Unicode字符集用16位表示,会造成内存空间浪费。因此提出多字节字符集 (MBCS),字符的宽度可以是一个字节,也可是两个字节或多个字节。这些多字节字符集按单字节值对待,其中一些字符改变了后续字符的含义。如果字符的宽度是两个字节,那么它的第一个字节就是一个特殊的“前导字节”,该字节是根据所使用的代码页从某个特定范围选定的。前导字节和“尾字节”合起来指定一个唯一的字符编码。

3.两种字符集对比

VC6的设置:多字节。
VS的默认设置:Unicode,在属性中可以改成多字节。
多字节编码:char,string,CStringA。
Unicode编码:wchar_t,wstring,CStringW。//带W的为Unicode字符集 因为Unicode是宽字节字符集用W表示
注意:如果项目是Unicode,那么CString就被定义为CStringW,否则就是CStringA。
附:
LPSTR = char*;LPCSTR = const char*;
LPWSTR = wchar_t*;LPCWSTR = const wchar_t*;
至于LPCTSTR也是根据项目字符集来定义为LPCWSTR(Unicode)或LPCSTR(多字节)。
OK,上面的定义很明显了,注意用的时候别弄混了,我觉得最好的方式是,使用wchar_t和wstring(api大多使用unicode,即使是多字节版本也是把多字节转成unicode再去调用unicode版api),我不太喜欢CString。
接下来就是转换:www.2cto.com
// C++
char* 到 string:string str("char"); 或者string str = "char";
string 到 char*:const char* ch = str.c_str();
wchar_t* 和 wstring与上相同。
// MFC
char* 到 CStringA:CStringA str("char");
CStringA 到 char*:const char* ch = str.operator LPCSTR(); (注意:反对使用GetBuffer,因为使用这个,必须要ReleaseBuffer,而且很多时候没必要去分配空间)
wchar_t* 和 CStringW与上相同。
// 字符集之间转换
char* 到 wchar_t*:CA2W a2w("char"); const wchar_t* wch = a2w.operator LPCWSTR();
wchar_t* 到 char*:CW2A w2a(L"wchar_t"); const char* ch = w2a.operator LPCSTR(); (注意:反对使用_T("chs")这种方式,程序字符集在一开始就该确定,而且最好选择Unicode)
关于CA2W和CW2A这两个类,可以在atlconv.h中找到源代码,其实就是对WideCharToMultiByte和MultiByteToWideChar的封装。

Visual Studio中C++关于Unicode字符集和多字节字符集相关推荐

  1. 转:Unicode字符集和多字节字符集关系

    原文地址: http://my.oschina.net/alphajay/blog/5691 unicode.ucs-2.ucs-4.utf-16.utf-32.utf-8 http://stallm ...

  2. Unicode字符集和多字节字符集关系(一)

    另外可参考: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 http://blog.csdn.net/smonster/archive/2008/10/31/3194587.a ...

  3. VS2005 宽字符 unicode字符集和多字节字符集

    在vs2005以前版本的vs默认使用多字节字符集,而vs2005默认使用unicode字符集,这会使一些代码不能编译通过 其区别如下 unicode字符集 void Point::output(int ...

  4. 探究Visual Studio中的乱码问题

    关于乱码,没遇到皆大欢喜,遇到了头痛不已.在Visual Studio中程序遇到乱码,需要明确三个概念,那么问题就好解决了. 三个字符集概念 源码字符集 MSVC中/source-charset 即源 ...

  5. Visual Studio 增加每行最多字符数限制参考线

    文章目录 1 下载插件Editor Guidelines 2 Visual Studio 中设置 3 命令设置 1 下载插件Editor Guidelines Editor Guidelines:ht ...

  6. Visual Studio中Website和Web Application Project的区别

    Visual Studio 2005/2008/2010中均有两种Web开发模型,分别是Website(网站)和Web Application Project(Web应用程序项目),许多初学者都不是很 ...

  7. Xamarin XAML语言教程Visual Studio中实现XAML预览

    2019独角兽企业重金招聘Python工程师标准>>> Xamarin XAML语言教程Visual Studio中实现XAML预览 每次通过编译运行的方式查看XAML文件效果,需要 ...

  8. 《Ext JS权威指南》节选:在Visual Studio中实现Ext JS智能提示

    Visual Studio(下面简称VS) 2008和2010都有从JS库文件获取智能提示的功能,不过直接使用ExtJS的库文件的话,虽然也有提示,但是不全,应该说是大部分没有,主要原因是VS脚本提示 ...

  9. 如何:在 Visual Studio 中添加或移除引用(转载)

    http://msdn2.microsoft.com/zh-cn/library/wkze6zky(VS.80).aspx Visual Studio 如何:在 Visual Studio 中添加或移 ...

  10. Visual Studio中没有为此解决方案配置选中要生成的项目

    Visual Studio中没有为此解决方案配置选中要生成的项目 参考文章: (1)Visual Studio中没有为此解决方案配置选中要生成的项目 (2)https://www.cnblogs.co ...

最新文章

  1. 牛顿的另一面:夺权、严惩罪犯,以一己之力挽救英国危机
  2. python字符集_Python任意字符集转换
  3. vnc服务器和客户端怎么配置文件,VNC服务器端与客户端配置
  4. 如何加快github的clone速度
  5. android高德地图搜索地址,地点/周边搜索-Android平台-开发指南-高德地图车机版 | 高德地图API...
  6. dubbo启动服务启动报错.UnsatisfiedDependencyException: Error creating bean with name '***': Un
  7. python羊车门_羊车门 python 作业
  8. 怎么更改wifi频段_手机wifi延迟高怎么办
  9. php curl发送delte,php Curl如何发起POST DELETE GET POST请求
  10. linux指令诀窍大全,六个优雅的Linux命令行技巧
  11. git 入门第二节 本地和远程仓库链接
  12. VB.NET中DataGridView控件
  13. http://jingyan.baidu.com/article/636f38bb3eb78ad6b8461082.html
  14. C语言——PTA 统计素数并求和
  15. nas918+支持的cpu_C2000浮点运算注意事项——CPU和CLA的差异及误差处理技巧
  16. 课程笔记《李彦宏·智能交通7讲》
  17. [授权发表]程序执行的那一刹那
  18. Android中文件的读写---assets和raw下的资源文件
  19. ubuntu chm文档阅读
  20. mac如何强制退出程序?强制退出程序的六种方法

热门文章

  1. 强化学习笔记:马尔科夫链介绍及基于Python的蒙特卡洛仿真
  2. Linux内核配置Kconfig
  3. 基于遗传算法的车辆优化调度-matlab代码 考虑供应过剩惩罚、供应不足惩罚成本
  4. Openrefine mysql_openrefine 2.5稳定版-OpenRefine下载(数据清洗工具) 2.5 官方稳定版 - 河东下载站...
  5. 一颗万能的PD协议芯片,最火的Type-C PD协议芯片“LDR6023“, 它是如何实现各种应用呢?
  6. idea配置Translation插件为有道翻译引擎
  7. APN(default、mms、supl、dun、hipri接入点类型的区别)
  8. WIN10不显示sql2005服务器,win10系统安装sQLserver2005提示“sQL server服务无法启动”的设置办法...
  9. matlab opnet,OPNET中设计网络 MATLAB
  10. 【51单片机】单片机仿真软件Proteus 8.7破解和汉化教程(附下载地址)