Unicode字符集 和 多字节字符集的一些说明(转)
2013-04-24 21:14
253 查看
在编译许多程序的时候,我们常常会出现诸如指针转换错误或者const char[] 不能转换成XX的错误,这时很可能就是项目编码的问题了,如果您使用的是VS编程环境,那么打开工程属性,里面就有个选项是给你选择采用多字符集还是采用unicode。而对于这两者,我坚定不移的喜欢unicode~
在多字节环境下,系统会按照ASCII字符表中128个字符进行截断操作,由于汉字是占用两个的字节的,所以在即有汉字又有英文的字符串中,该函数只会截断字符串右边英文字符,而对于汉字则无法处理。
而对于Unicode字符集使用两个字节对世界上几乎所有的语言进行编码(0×0000-0xFFFF),它可以表达的字符数量为16位,即65536个字符,每种语言的代码段不同,两个字节所表达的字符是唯一的,所以在该环境下,每一个字符都有唯一的一个编码,那么在进行截断操作时,自然不会出现意料之外的结果。
而我看过好几本有名气的C++的书中,都是说到一个项目或者程序的编码最好都选择Unicode(可是在几本国内出的书里不但没提及,而且提供的源代码也全都是“多字节”的),在此,我并没有鄙视多字节的意思,只是觉得写出通用的,跨语言的代码时候最好采用unicode。
下面这段话是来自MSDN:
要完成应用程序的 Unicode 编程,还必须:
使用 _T 宏有条件地编写字符串的代码,使之可移植到 Unicode。
当传递字符串时,请注意函数参数要求的长度是以字符为单位还是以字节为单位的。如果在使用 Unicode 字符串,这一区别是很重要的。
使用 C 运行时字符串处理函数的可移植版本。
使用以下用于字符和字符指针的数据类型:
TCHAR 这里将使用 char。
LPTSTR 这里将使用 char*。
LPCTSTR 这里将使用 const char*。CString 提供 operator LPCTSTR 来在 CString 和 LPCTSTR 之间进行转换。
CString 还提供识别 Unicode 的构造函数,赋值运算符和比较运算符。
呵呵~补充一点就是使用_T的时候,如果系统提示你它是没有定义的标识符的话,带上atlstr.h就ok了。哈,又是一个笔记~
在多字节环境下,系统会按照ASCII字符表中128个字符进行截断操作,由于汉字是占用两个的字节的,所以在即有汉字又有英文的字符串中,该函数只会截断字符串右边英文字符,而对于汉字则无法处理。
而对于Unicode字符集使用两个字节对世界上几乎所有的语言进行编码(0×0000-0xFFFF),它可以表达的字符数量为16位,即65536个字符,每种语言的代码段不同,两个字节所表达的字符是唯一的,所以在该环境下,每一个字符都有唯一的一个编码,那么在进行截断操作时,自然不会出现意料之外的结果。
而我看过好几本有名气的C++的书中,都是说到一个项目或者程序的编码最好都选择Unicode(可是在几本国内出的书里不但没提及,而且提供的源代码也全都是“多字节”的),在此,我并没有鄙视多字节的意思,只是觉得写出通用的,跨语言的代码时候最好采用unicode。
下面这段话是来自MSDN:
要完成应用程序的 Unicode 编程,还必须:
使用 _T 宏有条件地编写字符串的代码,使之可移植到 Unicode。
当传递字符串时,请注意函数参数要求的长度是以字符为单位还是以字节为单位的。如果在使用 Unicode 字符串,这一区别是很重要的。
使用 C 运行时字符串处理函数的可移植版本。
使用以下用于字符和字符指针的数据类型:
TCHAR 这里将使用 char。
LPTSTR 这里将使用 char*。
LPCTSTR 这里将使用 const char*。CString 提供 operator LPCTSTR 来在 CString 和 LPCTSTR 之间进行转换。
CString 还提供识别 Unicode 的构造函数,赋值运算符和比较运算符。
呵呵~补充一点就是使用_T的时候,如果系统提示你它是没有定义的标识符的话,带上atlstr.h就ok了。哈,又是一个笔记~
相关文章推荐
- Utf8,Unicode,多字节等一些字符集的处理函数
- Unicode字符集和多字节字符集关系
- VC++的UNICODE工程和多字节字符集的HTTP请求
- vc中,unicode项目向多字节字符集项目移植
- Unicode字符集和多字节字符集关系
- vs2010 mfc项目配置属性的字符集为Unicode和多字节时,两者转换后使用的控件外观不一样
- Unicode字符集和多字节字符集关系
- 使用Unicode(宽字节字符集)兼谈_T与L
- vc中,unicode项目向多字节字符集项目移植.
- Unicode字符集和多字节字符集关系
- Unicode字符集和多字节字符集关系
- MFC 对话框使用 Unicode 字符集与使用多字节字符集的不同
- 使用Unicode(宽字节字符集)兼谈_T与L
- Unicode字符集和多字节字符集关系
- Unicode字符集与多字节字符集的比较(解决“cannot convert parameter 1 from 'char []' to 'LPCWSTR'”)
- Unicode字符集和多字节字符集关系
- vc中unicode项目向多字节字符集项目移植
- unicode和MBCS(多字节字符集)的关系
- 字符集研究之多字节字符集和unicode字符集
- VC/多字节字符集和unicode宽字符集