ASCII和Unicode都是指文本的数字表示的标准,特别是组成文本的字符。然而,这两个标准有着显著的不同,许多属性反映了它们各自的创作顺序。
毫无疑问,美国信息交换标准码(ASCII)以英文字母书写,迎合了美国读者的需求。它处理非重音字母,如A-Z和A-Z,加上少量标点符号和控制字符。
特别是,如果不通过替换重音字符(例如cafe)来将外来词英语化,就无法用ASCII表示café等其他语言的外来词。本地化的ASCII扩展是为了满足各种语言的需求而开发的,但是这些努力使得互操作性变得尴尬,并且明显地扩展了ASCII的功能。
与此相反,通用编码字符集(Unicode)位于标准的另一端。Unicode试图迎合世界上尽可能多的书写系统,以至于它涵盖了古代语言和每个人最喜欢的一组表达符号emoji。
简单地说,字符集是字符的选择(例如,a-Z),而字符编码是字符集和可以数字表示的值(例如,a=1,B=2)之间的映射。
ASCII标准有效地同时定义了它所表示的字符集和将每个字符映射为数值的方法。
相反,Unicode这个词在几个不同的上下文中被用来表示不同的东西。您可以将其视为一个包罗万象的术语,如ASCII,用于表示字符集和许多编码。但是,由于有多种编码方式,Unicode这个术语通常用来指整个字符集,而不是它们的映射方式。
由于其范围,Unicode代表的字符远远多于ASCII。标准ASCII使用7位范围对128个不同字符进行编码。另一方面,Unicode是如此之大,以至于我们需要使用不同的术语来讨论它!
Unicode迎合了1111998可寻址代码点。代码点大致类似于为字符保留的空间,但情况要比开始深入研究细节时复杂得多!
更有用的比较是当前支持多少脚本(或编写系统)。当然,ASCII只处理英文字母,基本上是拉丁或罗马字母。2020年生产的Unicode版本更进一步:它支持总共154个脚本。
ASCII的7位范围意味着每个字符都存储在一个8位字节中;在标准ASCII中,备用位是未使用的。这使得大小计算变得简单:文本的长度(以字符为单位)是文件的大小(以字节为单位)。
您可以通过以下bash命令序列来确认这一点。首先,我们创建一个包含12个文本字母的文件:
$ echo -n 'Hello, world' > foo要检查文本是否采用ASCII编码,我们可以使用file命令:
$ file foofoo: ASCII text, with no line terminators最后,为了获得文件占用的确切字节数,我们使用stat命令:
$ stat -f%z foo12由于Unicode标准处理的字符范围要大得多,Unicode文件自然会占用更多的存储空间。具体多少取决于编码。
重复前面的同一组命令,使用不能用ASCII表示的字符,可以得到以下结果:
$ echo -n '€' > foo$ file foofoo: UTF-8 Unicode text, with no line terminators$ stat -f%z foo3在Unicode文件中,单个字符占用3个字节。注意,bash自动创建了一个UTF-8文件,因为ASCII文件不能存储所选字符(€)。到目前为止,UTF-8是Unicode中最常见的字符编码;UTF-16和UTF-32是两种可选编码,但它们的使用量要少得多。
UTF-8是一种可变宽度编码,这意味着它对不同的代码点使用不同的存储量。每个代码点将占用1到4个字节,目的是使更常见的字符需要更少的空间,从而提供一种内置压缩。缺点是确定给定文本块的长度或大小要求变得更加复杂。
为了向后兼容,前128个Unicode代码点表示等效的ASCII字符。由于UTF-8用一个字节对这些字符进行编码,因此任何ASCII文本也是UTF-8文本。Unicode是ASCII的超集。
但是,如上所示,许多Unicode文件不能在ASCII上下文中使用。任何越界的字符都将以意外的方式显示,通常使用与预期完全不同的替换字符。
在大多数情况下,ASCII基本上被认为是一种遗留标准。即使在只支持拉丁语脚本的情况下,也不需要完全支持Unicode的复杂性,例如,使用UTF-8和利用其ASCII兼容性通常更方便。
特别是,应该使用UTF-8保存和传输web页面,UTF-8是HTML5的默认值。这与早期的web形成了对比,后者在被拉丁1取代之前默认使用ASCII。
ASCII的最后一次修订发生在1986年。
相反,Unicode每年都在更新。新的脚本、角色,尤其是新的表情符号会定期添加。由于只分配了其中的一小部分,整个字符集在可预见的未来可能会不断增长。
相关:100个最流行的表情解释
ASCII服务于它的目的已有几十年了,但是Unicode现在已经有效地取代了它,用于除遗留系统之外的所有实际用途。Unicode更大,因此更具表现力。它代表了一种全球性的协作努力,并提供了更大的灵活性,尽管这是以牺牲一些复杂性为代价的。
...rchar的语法是varchar[(n | max)]。Varchar存储的ASCII数据是非Unicode数据,它是正常使用中使用的数据类型。Varchar每个字符使用一个字节。它还将每个字符串的长度存储在数据库中。Varchar的数据长度可变,最多可以存储8000个非Unicode...
... 请记住,这里显示的函数用于ASCII字符串,而不是Unicode字符串。PHP还支持Unicode和其他多字节字符编码方案,并有一组单独的函数。 ...
ASCII和Unicode都是指文本的数字表示的标准,特别是组成文本的字符。然而,这两个标准有着显著的不同,许多属性反映了它们各自的创作顺序。 ...
... ASCII得到了极大的扩展,并被Unicode所取代,Unicode是一个更全面、更雄心勃勃的标准,下面将对此进行讨论。2008年,Unicode在网络应用方面超过了ASCII。 ...
...文本中使用的标准空间字符。 网页上的文本例外,其中Unicode不间断空格字符(十进制值160)通常用于空格。TRIM不会删除此字符,因此如果文本中存在此字符,则需要手动删除它。 相关:什么是字符编码像ANSI和Unicode,他们有什...
...所取代,其中包括像欧元符号这样的更新字形。 (藏文Unicode v4节选自unicode.org) Unicode–此编码标准旨在实现通用性。它目前包括93个脚本组织在几个街区,与更多的工作。Unicode的工作原理与其他字符集不同,它不是直接为字...
...建ASCII艺术和其他冗长的图形在任何时间。 你可能在基于文本的常见问题解答或等距电子邮件签名中见过它们,也许你想知道人们是如何**它们的。你总是可以手工**,但让电脑为你做这项工作才是真正的极客之道。继续读下去...
Unicode与ASCII ASCII和Unicode是两个字符编码。基本上,它们是关于如何用二进制表示不同字符的标准,以便在数字媒体中写入、存储、传输和读取。两者之间的主要区别在于它们对字符的编码方式以及各自使用的位数。ASCII最初使...
...强建议(PEP),以及一些附加功能,如列表理解、增强的Unicode支持、循环检测垃圾收集系统等。随着时间的推移,随着版本2.7的更新,它继续发展,进一步增加了编程语言的功能。 什么是蟒蛇3(python 3)? python3是2008年12月发布...