是否有UTF8字符的分隔符字节?

时间:2010-02-23 22:56:30

标签: c++ unicode utf-8

如果我有一个包含UTF8内容的字节数组,我将如何解析它?是否有分隔符字节,我可以拆分以获取每个字符?

2 个答案:

答案 0 :(得分:13)

看看这里......

http://en.wikipedia.org/wiki/UTF-8

如果您要查找字符之间的边界,您需要的是“说明”中的表格。

获得高位零的唯一方法是ASCII子集0..127,以单个字节编码。所有非ASCII码点都有第二个字节,最高两位为“10”。代码点的前导字节永远不会有 - 它的高位表示字节数,但有一些冗余 - 你可以同样注意下一个没有“10”的字节来指示下一个代码点。

0xxxxxxx : ASCII
10xxxxxx : 2nd, 3rd or 4th byte of code
11xxxxxx : 1st byte of code, further high bits indicating number of bytes

unicode中的代码点不一定与字符相同。例如,有修饰符代码点(例如重音符号)。

答案 1 :(得分:0)

第一位设置为0的字节是普通的ASCII字符。将第一位设置为1的字节是UTF-8字符的一部分。

每个UTF-8字符中的第一个字节将其第二个位设置为1,因此该字节具有最高有效位11。属于同一个UTF-8字符的每个后续字节都以10开头。

每个UTF-8字符的第一个字节还表示有多少后续字节属于该字符,具体取决于该字节的最高有效位中设置为1的位数。

有关详细信息,请参阅Wikipedia page获取UTF-8。