Unicode UTF-8,解码问题



UTF-8 是可变长度编码。如果一个字符可以用一个字节来表示,例如:A(英文字母A(,UTF-8将用一个字节对其进行编码。如果需要两个字节,它将使用两个字节,依此类推。现在考虑我编码A (01000001( あ(11100011 10000001 10000010(。这将作为连续空间存储在内存中:01000001 11100011 10000001 10000010。我的问题是在解码时,编辑器如何知道第一个字节仅用于第一个字符,接下来的 3 个字节用于第二个字符?

**它最终可能会解码4个字符,其中每个字节都被视为字符,我的意思是这里的区别在哪里。

UTF-8 编码告诉程序每个编码的代码点有多少字节。 任何以 0xxxxxxx 开头的字节都是从 0 到 127 的 ASCII 字符。 任何以 10xxxxxx 开头的字节都是延续字节,并且只能在起始字节之后出现:110xxxxx1110xxxx11110xxx分别指定下一个字节、两个字节或三个字节是延续字节。

如果没有正确数量的继续字节,或者延续字节出现在错误的位置,则该字符串不是有效的 UTF-8。 某些程序利用这一点来尝试自动检测编码。

最新更新