我需要在低级环境中操作UTF-8字节数组。这些字符串将具有相似的前缀,并保存在利用此特性的容器中(即trie)。为尽可能地保持这种前缀相似性,我更喜欢在我的字节数组末尾使用终止符,而不是(例如)字节长度前缀。
我应该使用什么终止符?看起来
我应该使用什么终止符?看起来
0xff
在任何UTF-8字符串的所有位置上都是非法的字节,但也许有人确切知道吗?0xFF
和0xFE
在合法的UTF-8数据中不会出现。此外,字节0xF8
-0xFD
只会出现在已过时的UTF-8版本中,该版本允许多达六个字节序列。
0x00
是合法的,但除了U+0000的编码之外,不会出现在任何地方。这与其他编码完全相同,事实上它在所有这些编码中都是合法的,但这并没有阻止它被用作C字符串中的终止符号。我可能会选择0x00
。
字节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.
不存在七字节或更大的字节序列。根据UTF-8最新版本,UTF-8序列长度最多只能到4个字节,这将使0xf8-0xff未使用,但可能存在一个字节序列可以根据已过时的版本被有效地称为UTF-8,并包括在0xf8-0xfb之间的八位字节。
使用UTF-8控制字符怎么样?
您可以从http://www.utf8-chartable.de/中选择一个。
\0
?这是最兼容的。 - Has QUIT--Anony-Mousse