Документы по быстрой валидации UTF-8 - PullRequest
2 голосов
/ 29 июня 2011

Есть ли документы о современных валидаторах / декодерах UTF-8. Я видел реализации «в дикой природе», которые используют умные циклы, которые в обычных случаях обрабатывают до 8 байт на итерацию (например, все 7-битные входные данные ASCII).

1 Ответ

0 голосов
/ 01 марта 2012

Я не знаю о бумагах, это, вероятно, слишком конкретная и узкая тема для строго научного анализа, а скорее инженерная проблема.Вы можете начать с рассмотрения того, как это обрабатывается различными библиотеками.Некоторые решения будут использовать языковые трюки, в то время как другие носят общий характер.Для Java вы можете начать с кода UTF8ByteBufferReader , входящего в состав Javolution .Я обнаружил, что это намного быстрее, чем преобразователи набора символов, встроенные в язык.Я полагаю (но я не уверен), что последние используют общий кусок кода для многих кодировок и специфических для кодирования файлов данных.Javolution, напротив, имеет код, разработанный специально для UTF-8.

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

В некоторых ситуациях, например, если вы можете тратить немного памяти, и если теперь вы видите, что большинство символов, с которыми вы сталкиваетесь, будут из базовой многоязычной плоскости, вы можете попробовать еще более агрессивные таблицы поиска, например, сначала рассчитайте длину в байтах с помощьюметод, описанный выше, и если это 1 или 2 байта (возможно, 3 тоже имеет смысл), найдите декодированный символ в таблице.Помните, однако, что для сравнения этого и любого другого алгоритма, который вы пробуете, так как он совсем не обязательно должен быть быстрым (битовые операции выполняются довольно быстро, а с большой таблицей поиска вы теряете местность ссылок плюс вычисление смещения не полностью бесплатно,либо).

В любом случае, я предлагаю вам начать с просмотра кода Javolution или другой подобной библиотеки.

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