编程中的多字节和Unicode

本文探讨了多字节字符集与Unicode字符集在程序开发中的应用差异,特别是在字符串处理方面。通过具体示例说明了Unicode如何更好地支持跨语言编程,并提供了在Visual Studio环境中设置Unicode编码的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在编译许多程序的时候,我们常常会出现诸如指针转换错误或者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了。哈,又是一个笔记~


超越C++ 原创文章,转载请注明来源并保留原文链接

本文链接:http://www.beyondc.cn/programming-multi-byte-and-unicode.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值