在C和C+中使用Unicode.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目录: TOC \o 1-3 \h \z \u HYPERLINK \l _Toc290372816 在C/C++中使用Unicode字符串 PAGEREF _Toc290372816 \h 1 HYPERLINK \l _Toc290372817 Visual C++ UNICODE编码释疑 PAGEREF _Toc290372817 \h 6 HYPERLINK \l _Toc290372818 字符编码简介:ASCII,Unicode,UTF-8,GB2312 PAGEREF _Toc290372818 \h 12 在C/C++中使用Unicode字符串 摘录自:/archives/492 ??KC曾经写过这方面的文章,但是当时只是浅尝辄止,而且似乎“宣传”的效果也不怎么好,所以这次有必要进行一次深入的探讨。 1.ANSI(MBCS)和UNICODE的前世今生 ??ANSI是最先采用的字符集,以1Byte表示一个字符,后来为了表示含有音标的字母而产生了变种系列。但是这种字符集最大的问题是,无法表示诸如汉字、日本这样的“大字符” ??于是,当初设计ANSI的那批人(瞎猜的,出错勿怪)很天才的设计了一种新的字符集,即后来的MBCS(MBCS中最常用也最常见的是DBCS)。MBCS利用1Byte表示原有的那些字符,并利用2Bytes或更高来表示大字符,于是乎,就可以解决原先的问题了。 ??但是,这个看似高明的方法并不高明。因为某些字符是1Byte,而某些则是2Bytes或更高。程序员在遍历字符串的时候,必须检查下一个字节,才知道正在处理的是小字符还是大字符。这对程序员和项目经理来说,无疑是一场噩梦。 ??内牛满面的科学家通过不断的猜想,建模,设计,最终设计产生了目前最广泛使用的UNICODE字符集。 ??题外话:这里我们要感谢Apple、Xerox、Compaq、IBM、Microsoft、Oracle.etc,否则我们这批Coder也要继续内牛满面。 ??UNICODE字符集中,每个字符都是用2Bytes来表示,包括’\0′。统一的规范的结果则是效率的提升。 ??更让人欣喜的是,UNICODE可以在原来拥有超强语言字符支持的基础上,引入新的文字符号,包括标点符号、数学符号和技术符号等。 ??既然1F的swd同学指出来了,那么这里我们就在“深入”一点 ??事实上,默认的UNICODE指的是UTF-16,并且也存在其他表示字符的UTF标准。 ??UTF-8.UTF-8将一些字符编码为1Byte,一些为2Bytes,一些为3Bytes,而一些甚至可以达到4Bytes。值在0×0080以下的字符压缩为1Byte,这对US使用的字符非常合适。而0×0080到0x07FF之间的字符转换2Bytes,常用于欧洲和中东地区的字符。0×0080以上的字符为3Bytes,用于东亚字符,而最后把代理类型设置成4Bytes。但是当存在大量0×0080字符时,效率不如UTF-16高,好处是可以和原有的ANSI兼容 ??UTF-32是另一种标准。它将每个字符编码为4Bytes,除了程序内部之间使用之外,MS用的不多。 ??ps:对于ANSI和UNICODE的介绍,你可以在《Windows程序设计》、《Windows核心编程》等书中找到,并且,在Wikipedia上,也有详细的介绍 ??ANSI: HYPERLINK /zh-cn/ASCII \t _blank /zh-cn/ASCII ??UNICODE: HYPERLINK /zh-cn/UNICODE \t _blank /zh-cn/UNICODE 2.为什么使用UNICODE ??其实原因很简单,因为UNICODE比ANSI好用。 ?? 自从Windows2K开始,Win的系统内核开始完全支持并完全应用UNICODE编写,所有ANSI字符在进入底层前,都会被相应的API转换成UNICODE。所以,如果你一开始就使用UNICODE,则可以减少转换的用时和RAM开销。 ?? 对于JAVA/.NET等这些“新”的语言来说,内置的字符串所使用的字符集已经完全是UNICODE ?? 最重要的是,目前世界上大多数的程序用的字符集都是UNICODE,因为UNICODE有利于程序国际化和标准化。 ?? 但是很不幸,由于某国教育的滞后,教材陈旧不堪,致使大批学生“受害”。(据说最近某国大学的IDE从TC改成了VC6,可见无论某国教育怎么变,最终学生都免不了思想被强/墙奸的命运)。 3.如何在C/C++中使用UNICODE ??在C/C++中使用UNICODE,就意味着你可能要抛弃已经非常熟悉的char和ANSI版字符串处理函数。取而代之的是使用wchar_t,并且在使用字符串的时候,在”前加L

文档评论(0)

sd44055 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档