我对编码有点困惑。据我所知,旧的ASCII字符每个字符占用一个字节。一个Unicode字符需要多少字节?
我假设一个Unicode字符可以包含任何语言的所有可能字符——我说的对吗?那么每个字符需要多少字节呢?
UTF-7、UTF-6、UTF-16等是什么意思?它们是Unicode的不同版本吗?
我读了维基百科上关于统一码的文章,但对我来说太难了。我期待看到一个简单的答案。
我对编码有点困惑。据我所知,旧的ASCII字符每个字符占用一个字节。一个Unicode字符需要多少字节?
我假设一个Unicode字符可以包含任何语言的所有可能字符——我说的对吗?那么每个字符需要多少字节呢?
UTF-7、UTF-6、UTF-16等是什么意思?它们是Unicode的不同版本吗?
我读了维基百科上关于统一码的文章,但对我来说太难了。我期待看到一个简单的答案。
当前回答
简单地说,Unicode是一种为世界上所有字符分配一个数字(称为码位)的标准(它仍在进行中)。
现在你需要用字节表示这些代码点,这叫做字符编码。UTF-8, UTF-16, UTF-6是表示这些字符的方法。
UTF-8是多字节字符编码。字符可以有1到6个字节(其中一些现在可能不需要)。
UTF-32每个字符有4个字节一个字符。
UTF-16为每个字符使用16位,它只表示称为BMP的Unicode字符的一部分(对于所有实际目的来说已经足够了)。Java在其字符串中使用这种编码。
其他回答
奇怪的是,没有人指出如何计算一个Unicode字符占用多少字节。下面是UTF-8编码字符串的规则:
Binary Hex Comments
0xxxxxxx 0x00..0x7F Only byte of a 1-byte character encoding
10xxxxxx 0x80..0xBF Continuation byte: one of 1-3 bytes following the first
110xxxxx 0xC0..0xDF First byte of a 2-byte character encoding
1110xxxx 0xE0..0xEF First byte of a 3-byte character encoding
11110xxx 0xF0..0xF7 First byte of a 4-byte character encoding
所以简单的答案是:它需要1到4个字节,这取决于第一个将表明它将占用多少字节。
好吧,我刚刚也打开了维基百科的页面,在介绍部分我看到“Unicode可以通过不同的字符编码实现。最常用的编码是UTF-8(它对任何ASCII字符使用一个字节,这些字符在UTF-8和ASCII编码中具有相同的编码值,对其他字符使用最多四个字节),现在已经过时的UCS-2(它对每个字符使用两个字节,但不能对当前Unicode标准中的每个字符进行编码)。
正如这段引用所演示的,您的问题是假定Unicode是一种编码字符的单一方法。实际上有多种形式的Unicode,在引用中,其中一种甚至每个字符有一个字节,就像你习惯的那样。
所以你想要的简单答案是它是变化的。
看看这个Unicode代码转换器。例如,在“0x…”字段,然后单击Convert。十六进制数E2 80 89(3字节)出现在“UTF-8 code units”字段中。
在utf - 8:
1 byte: 0 - 7F (ASCII)
2 bytes: 80 - 7FF (all European plus some Middle Eastern)
3 bytes: 800 - FFFF (multilingual plane incl. the top 1792 and private-use)
4 bytes: 10000 - 10FFFF
在utf - 16:
2 bytes: 0 - D7FF (multilingual plane except the top 1792 and private-use )
4 bytes: D800 - 10FFFF
在utf - 32:
4 bytes: 0 - 10FFFF
根据定义,10FFFF是最后一个unicode码位,这样定义是因为它是UTF-16的技术限制。
它也是UTF-8可以在4字节内编码的最大码点,但UTF-8编码背后的思想也适用于5字节和6字节编码,以覆盖码点,直到7FFFFFFF。只有UTF-32的一半。
从维基:
UTF-8, 8位可变宽度编码,最大限度地兼容ASCII; UTF-16,一种16位变宽编码; UTF-32, 32位,固定宽度编码。
这是三种最流行的不同编码。
在UTF-8中,每个字符被编码成1到4个字节(主要编码) 在UTF16中,每个字符被编码成1到2个16位的单词和 在UTF-32中,每个字符都被编码为一个32位的单词。