Windows程序设计中Unicode的认识

Posted gefandui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows程序设计中Unicode的认识相关的知识,希望对你有一定的参考价值。

 什么是Unicode?

       简单来说,Unicode是ASCLL字符编码的一个扩展。那什么是ASCLL?,并且为什么要引用Unicode呢?用ASCLL字符编码的优点和缺点又是什么呢?Unicode又是以何种方式扩展ASCLL字符编码。下面的表述将一步一步解决这些问题。

什么是ASCLL字符编码?

     美国信息交换标准码(ASCLL:American Standard Code for Information Interchange)起始于50年代后期。开发ASCLL的过程中,由于价格原因,采用了7bit标准的代码字符集。最终代码就有26个大写字母、26个小写字母、10个数字、32个符号、32个控制代码、1个空格,总共128个代码。

ASCLL优点:26个字母代码是连续的,大写字母和小写字母可以通过改变一位数据而相互转换;10个数字也能直接转换;

ASCLL的问题:ASCLL是一个真正的美国标准,故而不能满足许多非英语国家的需求。那么此时就需要对ASCLL进行扩展,

例如:1967年ISO推出的ASCLL的变种、代码0x40、0x5B、0x5C、0x5D、 0x7B、0x7C、0x7D 为国家使用保留

这显然不是一个最佳的国际解决方案,但这并不能保证一致性。

扩展ASCLL

     在小型机开发初期,就严格建立了8位字节。因此,如果使用一个字节保存字符,则可以由128个的字符表示ASCLL,那么还有多出来的128位用来表示其他需要的字符,这256字符被写入rom中。基于这种方式推出的ANSI字符集。

双字节字符集

     迄今为止,我们已经看到256个字符的字符集。但中国、日本、韩国的象形文字符号高达21000个。如何容纳这些字符并保持ASCLL的兼容性呢?解决方案就是双字节字符集(DBCS:double byte character set)。DBCS从256代码开始,就像ASCII一样。与任何行为良好的内码表一样,最初的128个代码是ASCII。然而,较高的128个代码中的某些总是跟随著第二个字节。这两个字节一起(称作首位字节和跟随位字节)定义一个字元,通常是一个复杂的象形文字。看看细节是如何的:

     ASCII不是空出来了高128个码位吗?第一个byte在这高128里取值,再和第二个byte结合就可以表示最多128x256=32768个字符了。程序在处理字符串的时候,遇到有byte<128的就认为是ASCII,遇到>=128的就把下一个byte也读进来,换算成一个字符。

Unicode

    我们所面临的问题:世界上的书写语言不能仅用8位的代码表示。以前的解决方案包括ANSI、双字节字符集都不能满足需求。什么是真正的解决方案呢?根据日常编码的经验,如果8位不能满足我们的需求那么便增加位数使其扩增,这是再直接和自然不过的方法了,这也是非常简单的Unicode的原理,Unicode用16位表示字符,与上述方案不同,Unicode可直接表示65536个字符。这对表示世界上的大多数字符是十分充裕的。

 


以上是关于Windows程序设计中Unicode的认识的主要内容,如果未能解决你的问题,请参考以下文章

《windows程序设计》第一个窗口

如何将使用 tchar.h 处理 unicode 的 Windows C++ 移植到 iOS 应用程序

如何审核我的 Windows 应用程序以进行正确的 Unicode 处理?

windows程序设为开机自启动

从 SQLite 数据库中读取非 Unicode、非英文文本

在 Windows 中获取替代文件名