什么是UTF-8数据的良好终结符字节?

时间:2012-01-18 20:12:41

标签: unicode utf-8

我需要在低级环境中操作UTF-8字节数组。这些字符串将类似于前缀并保存在一个利用它的容器中(一个特里)。为了尽可能保持这种前缀相似性,我宁愿在字节数组的末尾使用终结符,而不是(比如说)一个字节长度的前缀。

我应该使用什么终结器? 似乎 0xff在任何UTF-8字符串的所有位置都是非法字节,但也许有人具体了解?

3 个答案:

答案 0 :(得分:6)

0xFF0xFE无法出现在合法的UTF-8数据中。此外,字节0xF8 - 0xFD将仅出现在UTF-8的过时版本中,该版本允许最多六个字节序列。

0x00是合法的,但除了U + 0000的编码外,不会出现在任何地方。这与其他编码完全相同,并且它在所有这些编码中合法的事实从未阻止它在C字符串中用作终结符。我可能会选择0x00

答案 1 :(得分:5)

字节0xff不能出现在有效的UTF-8序列中,也不能出现在0xfc,0xfd,0xfe中的任何一个。

所有UTF-8字节必须与

中的一个匹配
0xxxxxxx - Lower 7 bit.
10xxxxxx - Second and subsequent bytes in a multi-byte sequence.
110xxxxx - First byte of a two-byte sequence.
1110xxxx - First byte of a three-byte sequence.
11110xxx - First byte of a four-byte sequence.
111110xx - First byte of a five-byte sequence.
1111110x - First byte of a six-byte sequence.

没有七个或更大的字节序列。 latest version of UTF-8仅允许长度最多为4个字节的UTF-8序列,这将使0xf8-0xff未使用,但可以根据过时的版本将字节序列有效地称为UTF-8并包含八位字节在0xf8-0xfb。

答案 2 :(得分:0)

如何使用其中一个UTF-8控制字符?

您可以从http://www.utf8-chartable.de/

中选择一个