我需要在低级环境中操作UTF-8字节数组。这些字符串将类似于前缀并保存在一个利用它的容器中(一个特里)。为了尽可能保持这种前缀相似性,我宁愿在字节数组的末尾使用终结符,而不是(比如说)一个字节长度的前缀。
我应该使用什么终结器? 似乎 0xff
在任何UTF-8字符串的所有位置都是非法字节,但也许有人具体了解?
答案 0 :(得分:6)
0xFF
和0xFE
无法出现在合法的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控制字符?
中选择一个