Unicode和ASCII的确切区别是什么?

ASCII共有128个字符(扩展集为256个)。

Unicode字符有大小规范吗?


当前回答

理解ASCII和Unicode最初创建的原因有助于我理解两者之间的差异。

ASCII,起源

正如在其他答案中所述,ASCII使用7位来表示一个字符。通过使用7位,我们最多可以有2^7(= 128)个不同的组合*。这意味着我们最多可以表示128个字符。

等等,7位?但为什么不是1字节(8位)呢? 最后一位(第8位)作为奇偶校验位用于避免错误。 这在几年前是相关的。

大多数ASCII字符是可打印的字母字符,如abc, abc, 123, ?&!等。其他是控制字符,如回车、换行、制表符等。

请看下面几个字符在ASCII中的二进制表示:

0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)

看到完整的ASCII表在这里。

ASCII码只适用于英语。

什么?为什么只讲英语?世界上有这么多语言! 因为当时计算机产业的中心在美国 时间。因此,他们不需要支持口音或其他 例如á, ü, ç, ñ等(又名变音符号)。

ASCII扩展

一些聪明的人开始使用第8位(用于奇偶校验的位)来编码更多的字符来支持他们的语言(例如,支持法语中的“é”)。仅使用一个额外的位,将原始ASCII表的大小增加一倍,以映射到256个字符(2^8 = 256个字符)。而不是之前的2^7 (128)

10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)

这种“ASCII扩展为8位,而不是以前的7位”的名称可以被称为“扩展ASCII”或“8位ASCII”。

正如@Tom在下面的评论中指出的那样,没有所谓的“扩展ASCII”,但这是一种简单的方法来指代这个8位技巧。8位ASCII表有许多变体,例如ISO 8859-1,也称为ISO Latin-1。

统一码的崛起

ASCII扩展解决了基于拉丁字母的语言的问题…那其他需要完全不同字母表的字母呢?希腊吗?俄罗斯吗?中餐之类的?

我们需要一个全新的角色集……这就是Unicode背后的逻辑。Unicode并不包含每一种语言的每一个字符,但它确实包含了大量的字符(参见这个表)。

您无法将文本保存到硬盘驱动器为“Unicode”。Unicode是文本的抽象表示。您需要对这个抽象表示进行“编码”。这就是编码发挥作用的地方。

编码:UTF-8 vs UTF-16 vs UTF-32

这个答案很好地解释了基本原理:

UTF-8和UTF-16是变长编码。 在UTF-8中,一个字符可以至少占用8位。 在UTF-16中,字符长度以16位开始。 UTF-32是一种固定长度的32位编码。

UTF-8对前128个字符使用ASCII集。这很方便,因为这意味着ASCII文本在UTF-8中也有效。

助记符:

UTF-8:最小8位。 UTF-16:最小16位。 UTF-32:最小32位和最大32位。

注意:

为什么是2 ^ 7 ?

这对一些人来说是显而易见的,但只是以防万一。我们有7个可用的插槽,填满0或1(二进制代码)。 每个都可以有两种组合。如果我们有7个点,我们有2 * 2 * 2 * 2 * 2 * 2 * 2 = 2^7 = 128种组合。把它想象成一个有七个轮子的密码锁,每个轮子只有两个数字。

来源:维基百科,这篇很棒的博客文章和Mocki。在我最初发布这篇摘要的地方。

其他回答

理解ASCII和Unicode最初创建的原因有助于我理解两者之间的差异。

ASCII,起源

正如在其他答案中所述,ASCII使用7位来表示一个字符。通过使用7位,我们最多可以有2^7(= 128)个不同的组合*。这意味着我们最多可以表示128个字符。

等等,7位?但为什么不是1字节(8位)呢? 最后一位(第8位)作为奇偶校验位用于避免错误。 这在几年前是相关的。

大多数ASCII字符是可打印的字母字符,如abc, abc, 123, ?&!等。其他是控制字符,如回车、换行、制表符等。

请看下面几个字符在ASCII中的二进制表示:

0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)

看到完整的ASCII表在这里。

ASCII码只适用于英语。

什么?为什么只讲英语?世界上有这么多语言! 因为当时计算机产业的中心在美国 时间。因此,他们不需要支持口音或其他 例如á, ü, ç, ñ等(又名变音符号)。

ASCII扩展

一些聪明的人开始使用第8位(用于奇偶校验的位)来编码更多的字符来支持他们的语言(例如,支持法语中的“é”)。仅使用一个额外的位,将原始ASCII表的大小增加一倍,以映射到256个字符(2^8 = 256个字符)。而不是之前的2^7 (128)

10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)

这种“ASCII扩展为8位,而不是以前的7位”的名称可以被称为“扩展ASCII”或“8位ASCII”。

正如@Tom在下面的评论中指出的那样,没有所谓的“扩展ASCII”,但这是一种简单的方法来指代这个8位技巧。8位ASCII表有许多变体,例如ISO 8859-1,也称为ISO Latin-1。

统一码的崛起

ASCII扩展解决了基于拉丁字母的语言的问题…那其他需要完全不同字母表的字母呢?希腊吗?俄罗斯吗?中餐之类的?

我们需要一个全新的角色集……这就是Unicode背后的逻辑。Unicode并不包含每一种语言的每一个字符,但它确实包含了大量的字符(参见这个表)。

您无法将文本保存到硬盘驱动器为“Unicode”。Unicode是文本的抽象表示。您需要对这个抽象表示进行“编码”。这就是编码发挥作用的地方。

编码:UTF-8 vs UTF-16 vs UTF-32

这个答案很好地解释了基本原理:

UTF-8和UTF-16是变长编码。 在UTF-8中,一个字符可以至少占用8位。 在UTF-16中,字符长度以16位开始。 UTF-32是一种固定长度的32位编码。

UTF-8对前128个字符使用ASCII集。这很方便,因为这意味着ASCII文本在UTF-8中也有效。

助记符:

UTF-8:最小8位。 UTF-16:最小16位。 UTF-32:最小32位和最大32位。

注意:

为什么是2 ^ 7 ?

这对一些人来说是显而易见的,但只是以防万一。我们有7个可用的插槽,填满0或1(二进制代码)。 每个都可以有两种组合。如果我们有7个点,我们有2 * 2 * 2 * 2 * 2 * 2 * 2 = 2^7 = 128种组合。把它想象成一个有七个轮子的密码锁,每个轮子只有两个数字。

来源:维基百科,这篇很棒的博客文章和Mocki。在我最初发布这篇摘要的地方。

ASCII定义了128个字符,对应于数字0-127。Unicode定义了(小于)221个字符,类似地,这些字符映射到数字0-221(尽管目前不是所有的数字都被分配了,有些是保留的)。

Unicode是ASCII的超集,数字0-127在ASCII中的含义与在Unicode中的含义相同。例如,数字65的意思是“拉丁大写字母‘A’”。

因为Unicode字符通常不适合一个8位字节,所以有许多方法将Unicode字符存储在字节序列中,例如UTF-32和UTF-8。

java提供了对Unicode的支持,即它支持所有世界范围的字母。因此,java中的char的大小是2字节。和范围是0到65535。

存储

给定的数字仅用于存储1个字符

ASCII⟶27位(1字节) 扩展ASCII⟶28位(1字节) UTF-8⟶最小28,最大232位(最小1,最大4字节) UTF-16⟶最小216,最大232位(最小2,最大4字节) UTF-32⟶232位(4字节)


使用情况(截至2020年2月)

ASCII and Unicode are two character encodings. Basically, they are standards on how to represent difference characters in binary so that they can be written, stored, transmitted, and read in digital media. The main difference between the two is in the way they encode the character and the number of bits that they use for each. ASCII originally used seven bits to encode each character. This was later increased to eight with Extended ASCII to address the apparent inadequacy of the original. In contrast, Unicode uses a variable bit encoding program where you can choose between 32, 16, and 8-bit encodings. Using more bits lets you use more characters at the expense of larger files while fewer bits give you a limited choice but you save a lot of space. Using fewer bits (i.e. UTF-8 or ASCII) would probably be best if you are encoding a large document in English.

Unicode问题的主要原因之一来自于许多非标准扩展ASCII程序。除非您使用的是微软和大多数其他软件公司使用的流行页面,否则您很可能会遇到字符显示为方框的问题。Unicode实际上消除了这个问题,因为所有的字符代码点都是标准化的。

Unicode的另一个主要优点是,在最大限度时它可以容纳大量字符。正因为如此,Unicode目前包含了大多数书面语言,而且还有空间容纳更多的语言。这包括典型的从左到右的脚本,如英语,甚至从右到左的脚本,如阿拉伯语。中文、日文和许多其他变体也在Unicode中表示。所以Unicode不会很快被取代。

为了保持与当时已经广泛使用的旧ASCII码的兼容性,Unicode被设计成前8位与最流行的ASCII码页相匹配。因此,如果使用Unicode打开ASCII编码的文件,仍然可以在文件中得到正确的字符编码。这促进了Unicode的采用,因为它减轻了对那些已经在使用ASCII的人采用新编码标准的影响。

简介:

1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding.
2.Unicode is standardized while ASCII isn’t.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.

摘自:http://www.differencebetween.net/technology/software-technology/difference-between-unicode-and-ascii/#ixzz4zEjnxPhs