Существуют ли байты-разделители для символов UTF8? - PullRequest
9 голосов
/ 24 февраля 2010

Если у меня есть байтовый массив, содержащий содержимое UTF8, как мне его проанализировать? Существуют ли байты-разделители, которые я могу разделить для получения каждого символа?

Ответы [ 2 ]

13 голосов
/ 24 февраля 2010

Взгляните сюда ...

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

Если вы хотите определить границу между символами, вам нужно найти таблицу в «Описание».

Единственный способ получить старший бит ноль - это подмножество ASCII 0..127, закодированное одним байтом. Все не ASCII кодовые точки имеют 2-й байт вперед с «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 не обязательно совпадает с символом. Например, существуют кодовые точки модификаторов (например, ударения).

0 голосов
/ 24 февраля 2010

Байты, для которых первый бит установлен в 0, являются обычными символами ASCII. Байты, чей первый бит установлен в 1, являются частью символа UTF-8.

Первый байт в каждом символе UTF-8 имеет свой второй бит, установленный в 1, так что у байта есть старшие биты 11. Каждый следующий байт, принадлежащий одному и тому же символу UTF-8, начинается с 10.

Первый байт каждого символа UTF-8 дополнительно указывает, сколько из следующих байтов принадлежит символу, в зависимости от количества битов, которые установлены в 1 в старших значащих битах этого байта.

Подробнее см. На странице Википедия для UTF-8.

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