Какой хороший терминаторный байт для данных UTF-8? - PullRequest
7 голосов
/ 19 января 2012

Мне нужно манипулировать массивами байтов UTF-8 в низкоуровневой среде. Строки будут префиксно-подобными и хранятся в контейнере, который использует это (три раза). Чтобы максимально сохранить префикс-подобие, я бы предпочел использовать терминатор в конце моих байтовых массивов, а не ( скажем) префикс длины байта.

Какой терминатор мне следует использовать? Это кажется 0xff - это недопустимый байт во всех позициях любой строки UTF-8, но, возможно, кто-то знает конкретно?

Ответы [ 3 ]

6 голосов
/ 19 января 2012

0xFF и 0xFE не могут отображаться в допустимых данных UTF-8.Также байты 0xF8 - 0xFD появятся только в устаревшей версии UTF-8, которая допускает до шести последовательностей байтов.

0x00 допустима, но не появится нигде, кроме как в кодировкеиз U + 0000.Это точно так же, как и в других кодировках, и тот факт, что это допустимо во всех этих кодировках, никогда не мешал использовать его в качестве терминатора в C-строках.Я бы, наверное, пошел с 0x00.

5 голосов
/ 19 января 2012

Байт 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.

0 голосов
/ 19 января 2012

Как насчет использования одного из управляющих символов UTF-8?

Вы можете выбрать один из http://www.utf8 -chartable.de /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...