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

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

Unicode字符有大小规范吗?


当前回答

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个字符,而Unicode包含超过120,000个字符。

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

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

存储

给定的数字仅用于存储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有128个码位,从0到127。它可以容纳一个8位字节,值128到255往往用于其他字符。不兼容的选择,导致代码页灾难。在一个代码页中编码的文本不能被假设或猜测另一个代码页的程序正确读取。

Unicode的出现解决了这个灾难。版本1开始有65536个代码点,通常用16位编码。后来在版本2中扩展到110万个代码点。当前版本是6.3,使用了110万个可用代码点中的110,187个。这已经不适合16位了。

当v2出现时,16位编码非常普遍,例如微软和苹果的操作系统就使用了16位编码。以及像Java这样的语言运行时。v2规范提出了一种将这110万个码位映射到16位的方法。一种称为UTF-16的编码,一种可变长度编码,其中一个编码点可以占用2或4个字节。原始v1代码点占用2个字节,新增的占用4个字节。

另一种非常常见的变长编码,在*nix操作系统和工具中使用的是UTF-8,一个码位可以占用1到4个字节,原始ASCII码占用1个字节,其余的占用更多。唯一的非变长编码是UTF-32,每个编码点占用4个字节。不经常使用,因为它相当浪费。还有其他的,如UTF-1和UTF-7,被广泛忽视。

UTF-16/32编码的一个问题是,字节的顺序取决于创建文本流的机器的端序。所以加入UTF-16BE, UTF-16LE, UTF-32BE和UTF-32LE。

Having these different encoding choices brings back the code page disaster to some degree, along with heated debates among programmers which UTF choice is "best". Their association with operating system defaults pretty much draws the lines. One counter-measure is the definition of a BOM, the Byte Order Mark, a special codepoint (U+FEFF, zero width space) at the beginning of a text stream that indicates how the rest of the stream is encoded. It indicates both the UTF encoding and the endianess and is neutral to a text rendering engine. Unfortunately it is optional and many programmers claim their right to omit it so accidents are still pretty common.