Обнаружение кодировки - Charset detection

Обнаружение кодировки символов, определение кодировки, или же обнаружение кодовой страницы это процесс эвристически угадывая кодировка символов из серии байтов, представляющих текст. Метод признан ненадежным и используется только в определенных случаях. метаданные, например HTTP Тип содержимого: заголовок либо недоступен, либо считается ненадежным.

Этот алгоритм обычно включает статистический анализ байтовых паттернов, таких как частотное распределение триграфы различных языков, закодированных в каждой кодовой странице, которая будет обнаружена; такой статистический анализ также может быть использован для выполнения определение языка. Этот процесс не является надежным, потому что он зависит от статистических данных.

Как правило, неправильное определение кодировки приводит к моджибаке.

Один из немногих случаев, когда обнаружение кодировки работает надежно, это обнаружение UTF-8. Это связано с большим процентом недопустимых последовательностей байтов в UTF-8, поэтому текст в любой другой кодировке, в которой используются байты с установленным старшим битом, очень сильно вряд ли пройдет тест на валидность UTF-8. Однако плохо написанные процедуры определения кодировки не запускают сначала надежный тест UTF-8 и могут решить, что UTF-8 - это какая-то другая кодировка. Например, часто веб-сайты в кодировке UTF-8, содержащие название немецкого города München были показаны как München, так как код решил, что это ISO-8859 кодирование еще до тестирования, чтобы убедиться, что это UTF-8.

UTF-16 довольно надежно обнаруживать из-за большого количества символов новой строки (U + 000A) и пробелов (U + 0020), которые должны быть обнаружены при разделении данных на 16-битные слова, и большого количества байтов NUL, находящихся в четных или нечетных местах. . Общие персонажи должен проверяться, полагаясь на тест, чтобы убедиться, что текст действителен. UTF-16 не работает: Операционная система Windows неправильно распознал бы фразу "Буш скрыл факты "(без новой строки) в кодировке ASCII на китайском языке UTF-16LE, поскольку все байты для присвоенных символов Unicode в UTF-16.

Обнаружение кодировки особенно ненадежно в Европе, в среде смешанных кодировок ISO-8859. Это тесно связанные восьмибитные кодировки, которые в своей нижней половине частично перекрываются с ASCII и все расположения байтов действительны. Нет никакого технического способа отличить эти кодировки друг от друга, и их распознавание зависит от определения языковых особенностей, таких как частота букв или написание.

Из-за ненадежности эвристического обнаружения лучше правильно маркировать наборы данных с правильной кодировкой. HTML-документы, обслуживаемые через Интернет HTTP должна быть указана их кодировка из группы с использованием Тип содержимого: заголовок.

Content-Type: text / html; charset = UTF-8.

Изолированный HTML-документ, например, редактируемый как файл на диске, может подразумевать такой заголовок с помощью метатега внутри файла:

<мета http-Equiv="Тип содержимого" содержание="text / html; charset = UTF-8" >

или с новым метатипом в HTML5[1]

<мета кодировка=«УТФ-8» >

Если документ - Unicode, то некоторые кодировки UTF явно помечают документ встроенным инициалом. метка порядка байтов (Спецификация).

Смотрите также

Рекомендации

  1. ^ «4.2.5 Метаэлемент». W3C.

внешняя ссылка