Частично загрузить большой текстовый файл с разными кодировками - PullRequest
0 голосов
/ 12 июня 2009

Я пишу текстовый компонент Java и пытаюсь частично загрузить большой текстовый файл посередине (по соображениям скорости).

У меня вопрос, если текст имеет какой-нибудь многобайтовый формат кодирования, такой как UTF8, Big5, GBK и т. Д. Как я могу выровнять байты, чтобы правильно декодировать текст?

Ответы [ 2 ]

2 голосов
/ 12 июня 2009

Я не могу говорить о других форматах, но utf8 не должен быть слишком сложным.

Просто посмотрите на первый байт фрагмента, который вы взяли, и выясните оттуда:

Взято из википедии:

00000000-01111111   00-7F   0-127   US-ASCII (single byte)
10000000-10111111   80-BF   128-191 2'nd, 3rd, or 4'th byte of a multi-byte sequence
11000000-11000001   C0-C1   192-193 start of a 2-byte sequence, but code point <= 127
11000010-11011111   C2-DF   194-223 Start of 2-byte sequence
11100000-11101111   E0-EF   224-239 Start of 3-byte sequence
11110000-11110100   F0-F4   240-244 Start of 4-byte sequence

Если байт находится во 2-й или 3-й группе, то вы знаете, что пропустили часть символа. Если это в 1-й, 4-й, 5-й, 6-й группе, то вы знаете, что находитесь в начале персонажа. Действуйте соответственно оттуда.

0 голосов
/ 12 июня 2009

В дополнение к комментариям Джереми для UTF-8, для таких кодировок, как UTF-16, вы можете использовать некоторые эвристики здравого смысла, чтобы решить, правильно ли вы выровняли. Например, если вы ожидаете, что символы латинского алфавита плюс странные экзотические полтора символа превышают 256, возможно, вы получили неправильное выравнивание ...

...