Unicode和多字节字符集 (MBCS)
来源:互联网 发布:知乎 七月在夏天 编辑:程序博客网 时间:2024/05/18 12:43
最近在使用VS2008编写一个MFC的工程项目,里面在项目属性中字符集的设置中编码方式有“使用UNICODE”和“使用多字节”两种字符集,有时候编译出错,更改字符集选项,编译就通过,于是对这两种产生了疑问,下面通过一篇转载的文章向大家介绍一下这两种方式。
总结一下:
(1)当编译出现类似“参数类型转换”这样的问题时,这种情况一般是字符集的那里有问题,在使用Unicode时出现,这样的问题大多将字符串常量,等添加_T()表示。。。在开发中经常遇到这样的问题,屡试不爽,经验所得;
(2)在下面的参考中,作者提到了针对字符串的函数的一些调用的不同,诸如
如果 CString 函数通常情况下调用strcmp,那么它会调用相应的一般文本函数_tcscmp。详细的大家可以参看如下:(
Unicode和多字节字符集 (MBCS) 杂谈 (此转自一个新浪微博)
很多人曾经头疼过的问题,现在的VC版本基本都支持Unicode和多字节字符集(MBCS),在进行MFC编程时VC的默认设置是unicode字符集。但是我们通常需要做一些代码移植的工作,如果将多字节字符集下的程序代码移植到unicode字符集环境中,就需要针对此做出很多类型的转换,反之亦然。
首先,了解一下unicode和多字符字符集(MBSS)的区别:
在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)。
由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,提出了Unicode字符集,它固定使用16
多字节字符集(MBCS),字符的宽度可以是一个字节,也可是两个字节。如果字符的宽度是两个字节,那么它的第一个字节就是一个特殊的“前导字节”,该字节是根据所使用的代码页从某个特定范围选定的。前导字节和“尾字节”合起来指定一个唯一的字符编码。
如果为程序的生成定义了符号 _MBCS,则类型 TCHAR(CString基于该类型)将映射到char。由您来决定 CString 中的哪些字节是前导字节,哪些字节是尾字节。C运行时库提供函数来帮助您进行确定。
在 DBCS 下,给定的字符串可以包含所有的单字节 ANSI字符、所有的双字节字符或两者的组合。这些可能性需要您在分析字符串(包括 CString 对象)时要备加小心。
注意MFC中的 Unicode 字符串序列化能够读取 Unicode 和 MBCS字符串,而不论运行的是哪个版本的应用程序。正因为如此,数据文件在程序的 Unicode 和 MBCS版本之间是可移植的。
CString 成员函数使用其调用的 C 运行时库特殊的“一般文本”版本,或使用识别 Unicode 的函数,如lstrlen 或lstrcpy。因此,如果 CString 函数通常情况下调用strcmp,那么它会调用相应的一般文本函数_tcscmp。根据符号 _MBCS 和_UNICODE 定义方式的不同,_tcscmp 映射如下:
注意
符号_MBCS 和 _UNICODE 是互相排斥的。
CString 是基于 TCHAR 数据类型的。如果为程序的生成定义了符号_UNICODE,则会将TCHAR 定义为 wchar_t 类型(一个 16位的字符编码类型);否则,会将它定义为 char(普通的 8 位字符编码)。于是,在 Unicode下,CString 由 16 位字符组成。如果没有 Unicode,它们则由char类型的字符组成。
要完成应用程序的 Unicode 编程,还必须:
- 使用 _T 宏有条件地编写字符串的代码,使之可移植到 Unicode。
- 当传递字符串时,请注意函数参数要求的长度是以字符为单位还是以字节为单位的。如果在使用 Unicode字符串,这一区别是很重要的。
- 使用 C 运行时字符串处理函数的可移植版本。
- 使用以下用于字符和字符指针的数据类型:
- TCHAR
这里将使用char。 - LPTSTR
这里将使用char*。 - LPCTSTR
这里将使用const char*。CString 提供operator LPCTSTR 来在CString 和 LPCTSTR 之间进行转换。 CString 还提供识别 Unicode 的构造函数,赋值运算符和比较运算符。
- Unicode 和多字节字符集 (MBCS) 支持
- Unicode和多字节字符集 (MBCS) 杂谈
- Unicode和多字节字符集 (MBCS)
- Unicode和多字节字符集 (MBCS) 杂谈
- Unicode和多字节字符集 (MBCS) 杂谈
- Unicode 和多字节字符集 (MBCS) 支持
- MFC Unicode 和多字节字符集 (MBCS) 支持
- unicode和MBCS(多字节字符集)的关系
- unicode和MBCS(多字节字符集)的关系
- unicode和MBCS(多字节字符集)的关系
- unicode和MBCS(多字节字符集)的关系
- 多字节字符集 (MBCS)
- 多字节字符集 (MBCS)
- MFC中字符集(2)——Unicode 和多字节字符集 (MBCS) 支持
- 支持多字节字符集 (MBCS)
- Unicode字符集 和 多字节字符集 关系
- Unicode字符集和多字节字符集关系
- Unicode字符集和多字节字符集关系
- Fibonacci数列
- 掀起你的盖头来——Swift语言
- 用VC能不能做出类似word、写字板的程序
- poj 3259 Wormholes
- 看看走过的路——个人重构
- Unicode和多字节字符集 (MBCS)
- 运行报错,大家看看错在哪了?
- 手感很好
- 防止表单重复提交
- 进程内存Android进程的内存管理分析
- 简单工厂、工厂方法、抽象工厂的总结
- 【iOS】小实例,画字,画线,矩形,画图,动画(iOS学习笔记,从零开始)
- Mysql几种索引类型的区别及适用情况
- 自然语言处理(Natural language processing) 1