Кодировка символы обнаружения , обнаружение кодировки , или обнаружение кодовой страницы является процессом эвристический угадать кодировку символов из серии байт , которые представляют текст. Этот метод признан ненадежным и используется только тогда, когда определенные метаданные , такие как заголовок HTTP Content-Type:, либо недоступны, либо считаются ненадежными.
Этот алгоритм обычно включает статистический анализ байтовых паттернов, таких как частотное распределение триграфов различных языков, закодированных в каждой кодовой странице, которая будет обнаружена; такой статистический анализ также можно использовать для определения языка . Этот процесс не является надежным, потому что он зависит от статистических данных.
Как правило, неправильное определение кодировки приводит к моджибаке .
Один из немногих случаев, когда обнаружение кодировки работает надежно, - это обнаружение 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 : .
Content-Type: text / html; charset = UTF-8.
Изолированный HTML-документ, например, редактируемый как файл на диске, может подразумевать такой заголовок с помощью метатега внутри файла:
< meta http-Equiv = "Content-Type" content = "text / html; charset = UTF-8" >
или с новым метатипом в HTML5 [1]
< meta charset = "utf-8" >
Если документ является Unicode, то некоторые кодировки UTF явно помечают документ встроенной меткой начального порядка байтов (BOM).
См. Также [ править ]
- Международные компоненты для Unicode - библиотека, которая может выполнять определение кодировки.
- Идентификация языка
- Обнюхивание контента
- Обнюхивание браузера , аналогичный эвристический метод определения возможностей веб-браузера перед отправкой ему содержимого.
Ссылки [ править ]
- ^ «4.2.5 Метаэлемент» . W3C.
Внешние ссылки [ править ]
- IMultiLanguage2 :: DetectInputCodepage
- Справочник по API для определения кодировки ICU
- Справочник по обнаружению кодировки cpdetector
- Детекторы кодировки Mozilla
- Порт Java детекторов кодировки Mozilla
- Порт Delphi / Pascal детекторов кодировки Mozilla
- uchardet , C ++ ветвь детекторов кодировки Mozilla; включает инструмент командной строки Bash
- Порт C # детекторов кодировки Mozilla
- HEBCI, метод определения набора символов, используемого при отправке форм
- Распределение частот английских триграфов