【发布时间】:2018-06-17 00:19:39
【问题描述】:
UTF-8 是可变长度编码。如果一个字符可以使用单个字节来表示,例如:A(英文字母 A),UTF-8 将使用单个字节对其进行编码。如果它需要两个字节,它将使用两个字节,依此类推。 现在考虑我编码 A (01000001) あ(11100011 10000001 10000010)。 这将作为连续空间存储在内存中:01000001 11100011 10000001 10000010。 我的问题是在解码时,编辑器如何知道第一个字节仅用于第一个字符,接下来的 3 个字节用于第二个字符?
** 它最终可能会解码 4 个字符,其中每个字节都被视为字符,我的意思是这里的区别在哪里。
【问题讨论】:
-
你试过解码吗?你最后有 4 个字符吗?
-
编码是以长度为前缀的,所以你知道每个序列有多长。例如。
1110xxxx表示三个字节(三个“一”)。 -
@Kerrek SB 根据您的回答,前三个 1 构成长度符号。考虑 ???? (Unicode标量值:U+2070E),其二进制值为0010 0000 0111 0000 1110,这里不包含4个1。
-
@Anthony McGrath 我的编辑器或浏览器确实会打印出我存储的确切符号,但我想从理论上了解编辑器是如何进行解码的。
-
@user9185862 UTF-8 不直接使用 Unicode 代码点的二进制表示。字符的 UTF-8 表示????是
F0 A0 9C 8E,或11110000 10100000 10011100 10001110。