unicode UTF-8,解码问题

时间:2018-01-08 01:29:33

标签: unicode encoding utf-8

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

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

1 个答案:

答案 0 :(得分:6)

UTF-8编码告诉程序每个编码的代码点有多少字节。任何以0xxxxxxx开头的字节都是0到127之间的ASCII字符。任何以10xxxxxx开头的字节都是一个连续字节,只能在起始字节后发生:110xxxxx,{{1} }或1110xxxx分别指定下一个字节,两个字节或三个字节是连续字节。

如果没有正确数量的延续字节,或者连续字节出现在错误的位置,则字符串无效UTF-8。有些程序利用此功能尝试自动检测编码。