Unicode和ASCII的确切区别是什么?
ASCII共有128个字符(扩展集为256个)。
Unicode字符有大小规范吗?
Unicode和ASCII的确切区别是什么?
ASCII共有128个字符(扩展集为256个)。
Unicode字符有大小规范吗?
当前回答
java提供了对Unicode的支持,即它支持所有世界范围的字母。因此,java中的char的大小是2字节。和范围是0到65535。
其他回答
ASCII有128个码位,分配给图形字符和控制字符(控制码)。
统一码有1114,112个码位。目前大约有10万个编码点被分配给了字符,许多编码点被永久地变成了非字符(即不再用于编码任何字符),大多数编码点还没有分配。
ASCII和Unicode唯一的共同点是:1)它们都是字符代码。2) Unicode的128个第一个码位已经定义为与ASCII相同的含义,只是ASCII控制字符的码位只是定义为表示控制字符,其名称对应于其ASCII名称,但其含义在Unicode中没有定义。
然而,有时Unicode被描述为“宽ASCII”(即使在Unicode标准中!)。这是一个口号,主要试图传达这样一种思想,即Unicode是一种通用字符代码,就像ASCII曾经是那样(尽管ASCII的字符库严重不足,无法实现通用),而不是在不同的系统和应用程序以及不同的语言中使用不同的代码。
Unicode本身只定义字符的“逻辑大小”:每个字符都有一个特定范围内的编码。这些编码可以使用不同的传输编码来表示,并且在内存内部,Unicode字符通常使用每个字符一个或两个16位数来表示,这取决于字符范围,有时每个字符使用一个32位数。
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。
除了UTF是ASCII的超集之外,ASCII和UTF之间另一个很好的区别是在磁盘文件编码和数据表示以及随机内存中的存储方面。程序知道给定的数据应该被理解为ASCII或UTF字符串,方法是检测数据开头的特殊字节顺序标记代码,或者从程序员的意图假设数据是文本,然后检查它的模式,表明它是一种文本编码或另一种文本编码。
Using the conventional prefix notation of 0x for hexadecimal data, basic good reference is that ASCII text starts with byte values 0x00 to 0x7F representing one of the possible ASCII character values. UTF text is normally indicated by starting with the bytes 0xEF 0xBB 0xBF for UTF8. For UTF16, start bytes 0xFE 0xFF, or 0xFF 0xFE are used, with the endian-ness order of the text bytes indicated by the order of the start bytes. The simple presence of byte values that are not in the ASCII range of possible byte values also indicates that data is probably UTF.
还有其他一些字节顺序标记,它们使用不同的代码来表示数据应该被解释为以某种编码标准编码的文本。
存储
给定的数字仅用于存储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月)