鱼C论坛

 找回密码
 立即注册
查看: 1996|回复: 0

[学习笔记] 《WINDOWS程序设计》(020)2.1 字符集简史-2.1.5 Unicode的解救方案

[复制链接]
发表于 2018-10-21 22:09:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
2.1.5  Unicode的解救方案

    这里存在的一个基本问题是世界上的书面语言文字根本无法用256个8位代码来表示。以前那些涉及代码页和DBCS的解决方法已经被证明是不足和笨拙的。那么什么是真正的解救方案呢?

    作为程序员,我们有处理这类问题的经验。如果有太多的东西以至于用8位值根本无法表示,我们就试着使用更多位的值,例如也许使用16位值。这就是简单到可笑的Unicode的概念。与其用很容易混淆的多个256个字符的代码映射或者是混合使用有1个字节的代码和2字节代码的双字节字符集,还不如使用Unicode,一种统一的16位系统,它可以代表65 536个字符这对世界上的所有书面语言的所有字符和象形文字来说都已经足够了,其中还可以包括一批数学、符号以及装饰标志的集合。

    了解Unicode和DBCS之间的区别是必不可少的。Unicode被认为是(特别是在C编程语言环境中)“宽字符”。每一个在Unicode里的字符是16位宽而不是8位宽。8位值在Unicode里面是没有意义的。与此相反,在双字节字符集中我们仍在处理8位值。在双字字符集里,某些单字节本身就定义了一个字符,而另一些字节则需要一个额外字节才能完全定义一个字符。

    与使用DBCS字符串的混乱不同,使用Unicode文本就很像使用普通文本。你可能会很高兴地获悉,最开始的128个Unicode字符(16位码从0x0000到0x007F)是ASCII码,而之后的128个Unicode字符(代码从0x0080到0x00FF)是ISO 8859-1 ASCII扩展码。在Unicode里面的各个字符区块同样基于现有的标准。这是为了便于进行代码转换。希腊字母表使用从0x0370到0x03FF的代码,西里尔文使用从0x0400到0x04FF的代码,亚美尼亚文使用从0x0530到0x058F的代码,而希伯来语使用从0x0590到0x05FF的代码。汉语、日语和韩语(统称为中日韩)的象形文字占用从0x3000到0x9FFF的代码。

    Unicode最棒的地方是,它只有一个字符集。这就避免了二义性。Unicode是通过个人计算机行业几乎所有重要公司间的合作而出现的,而且代码的编制是与ISO 10646-1标准相似的。Unicode必不可少的参考标准是The Unicode Standard,Version 2.0(Addison-Wesley,1996)。这本非凡的书通过其他文档鲜有的一种方式揭示了世界上书面语言的丰富性和多样性。此外,这本书还提供了Unicode发展背后的理论和细节。

    然而Unicode是否就尽善尽美了呢?非也。Unicode字符的字符串占用的内存比ASCII字符串大两倍。(不过使用文件压缩在减少磁盘空间差别上有很大帮助。)但也许最严重的缺点是Unicode仍然相对地还很少被使用。作为程序员,这正是我们要改变的。

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
╰☆忝婲雨☆╮ + 1 + 1 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 01:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表