Unicode提供了一种相对轻松的方法
如果你没有注意到,那么整个世界都在美国之外。不幸的是,用不同语言表示文本对程序员来说可能是一个挑战。Unicode是表示文本的通用标准,可以轻松支持几乎任何语言。在这里,我们将了解Unicode的基础知识。
什么是Unicode?
如果您熟悉如何将文本存储在计算机中的技术细节并且您是母语为英语的人,那么您可能听说过ASCII,即美国信息交换标准代码。ASCII将字节映射到数字,字母,各种符号和控制字符,这些操作可以发出电脑扬声器或发出新线路信号的信号。如果您的主要语言是美国英语,它就会永远存在并且效果很好。
但是,世界上许多计算机用户都会说其他语言,其中许多语言甚至都不接近英语。如果您是开发人员并且您的软件没有考虑到这一点,那么您可能会遇到一些麻烦。
软件工程师兼作家Joel Spolsky讲述了如果程序员不注意语言环境会发生什么:
“几年前,FogBUGZ的beta测试人员想知道它是否能用日语处理收到的电子邮件。日语?他们用日语发邮件?我不知道。当我仔细查看我们用来解析的商业ActiveX控件时MIME电子邮件消息,我们发现它使用字符集做错了,所以我们实际上必须编写英雄代码来撤消它所做的错误转换并正确地重做它。当我查看另一个商业库时,它也是有一个完全破坏的字符代码实现。我与该软件包的开发人员通信,他有点认为他们“无法做任何事情。” 像许多程序员一样,他只是希望它会以某种方式被吹嘘。
“如果您了解Unicode,那么您可以构建能够轻松使用其他语言的应用程序.Unicode是一个致力于发布真正通用字符集的国际联盟,可以开发真正的通用程序。计算机科学家Donald E. Knuth称这是“我所知道的最好的工具,有助于在不同文化的人之间建立理解。”
因此在Unicode中,字符表示为“代码点”而不是字节,这些字节是从它们实际存储在计算机中的方式中抽象出来的。Unicode标准代表字母,数字,货币符号和书写方向(用于表示从右到左的语言,如日语,希伯来语和阿拉伯语)。
Unicode的历史
如前所述,ASCII已存在很长时间了。虽然它将字符转换为字节,但它只在每个字节中使用7位而不是通常的8位。与此同时,全世界计算机的普及使得代表不同语言成为必要。使用额外位扩展ASCII似乎是最明显的解决方案。问题在于每个公司和国家都以不同的方式扩展它,使得几乎不可能与使用不同语言的人交换数据。
在20世纪80年代后期,Apple和施乐公司的一些员工决定联合起来解决问题并开发出一种代表地球上所有语言的方法。他们很快就被Sun Microsystems和IBM的人员加入,组成了Unicode Consortium。该标准的第一个版本于1991年发布,并且不断改进。几乎所有处理文本的程序和几乎所有现代操作系统都支持Unicode。
UTF-8,UTF-16,UTF-32
由于Unicode现在无处不在,因此添加对应用程序的支持非常容易。只需查阅您喜欢的编程语言的文档。
Unicode有三种形式:
UTF-8
UTF-16
UTF-32
数字表示存储字符的位数。例如,UTF-8以8位字节存储字符。它也向后兼容 ASCII,并且在网络上使用非常广泛,因为它可以处理外来文本并且仍然保持紧凑。UTF-16使用16位来存储字符,并在紧凑存储和访问字符的能力之间提供良好的平衡。当您不必担心存储空间时,UTF-32是理想的选择。
为何选择Unicode?
他们称之为万维网是有原因的。它几乎普遍可用。如果您是开发人员,那么覆盖全球受众是值得的。这意味着以现代方式表示文本。Spolsky更直言不讳地说:
“所有关于'纯文本= ASCII =字符都是8位'的东西不仅错误,而且是绝对错误的,如果你仍然按照这种方式进行编程,那么你并不比不相信的医生好多了在细菌中。“
Unicode与ASCII
由于ASCII是计算机支持的最低限度,因此它不会消失。如果您绝对肯定您的应用程序只会在英语世界中使用,那么您可以放心使用它。但即使很多外国人学习英语,你仍然可以更好地使用Unicode,因为它比ASCII更灵活。此外,您可能永远不知道用户何时可能要键入欧元符号或带重音的字符。
全球标准
如果您希望您的应用程序真正具有全球性,则必须能够处理美国英语以外的语言。幸运的是,Unicode提供了一种相对无痛的方法。为什么不立即开始全球化您的软件?