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