分享

VS2010中文编码问题

 心情谷 2016-02-24
         不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、Big5、Shift_JIS 等各自的编码标准。这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。 当然对于ANSI编码而言,0x00~0x7F之间的字符,依旧是1个字节代表1个字符。这一点是ANSI编码与Unicode编码之间最大也最明显的区别。
unicode 是宽字符类型,是与国际接轨的,微软原先只支持ANSI,随着windows的用户越来越多,其想更抓住用户,则决定支持unicode字符,在win98编程软件,只支持ANSI字符,win2000后既支持ANSI也支持unicode,加入unicode库是为了使自己的软件显得高级一点点,不加也行,只是如果这软件在win2000环境下运行,速度要相对慢一点点点,因为字符要先转换为unicode传入整理完再转换为ANSI传出
不过加了unicode库,你又得学一下unicode,这其实也没什么,就是双字节字符集比如原先你写一个
char* str="Error";
现在加入T C h a r. h 文件
TCHAR *szError=_Text("Error");
这样如果在包含该头文件时没有定义_ U N I C O D E,上述就是单字节字符,如果定义了 _ U N I C O D E,就是双字节字符。_T("")是一个宏,定义于tchar.h文件中。作用是将字符串转换为Unicode编码。

在C语言中普通的字符串使用ANSI进行文字处理。也就是常见的双引号字符串。但是由于数据类型的局限性,ANSI的字符串不能保存全部语言。比如说中文。

例如:char *str = "ABC";

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。可以保存中文等。
_T是一个宏,作用是让你的程序支持Unicode编码。
因为Windows使用两种字符集ANSI和UNICODE,
前者就是通常使用的单字节方式,
但这种方式处理像中文这样的双字节字符不方便,
容易出现半个汉字的情况。
而后者是双字节方式,方便处理双字节字符。。

_T()和L也存在区别。
L是一定使用UNICODE进行编码。
_T()会根据编译条件的设置,选择不同的编码格式。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多