Какие кодировки общих символов должны поддерживать текстовые редакторы? - PullRequest
4 голосов
/ 20 января 2010

У меня есть текстовый редактор, который может загружать файлы ASCII и Unicode. Он автоматически определяет кодировку путем поиска спецификации в начале файла и / или поиска первых 256 байтов символов> 0x7f.

Какие другие кодировки должны поддерживаться, и какие характеристики позволят автоматически определять это кодирование?

Ответы [ 6 ]

4 голосов
/ 20 января 2010

Определенно UTF-8. Смотри http://www.joelonsoftware.com/articles/Unicode.html.

Насколько мне известно, не существует гарантированного способа обнаружить это автоматически (хотя вероятность ошибочного диагноза может быть уменьшена до очень небольшого значения путем сканирования).

3 голосов
/ 20 января 2010

Я не знаю о кодировках, но убедитесь, что они могут поддерживать различные стандарты окончания строк! (\ n vs \ r \ n)

Если вы еще не просмотрели блог Мика Каплана, я предлагаю сделать следующее: http://blogs.msdn.com/michkap/

В частности, эта статья может быть полезна: http://www.siao2.com/2007/04/22/2239345.aspx

1 голос
/ 22 января 2010

UTF-16 не очень часто встречается в текстовых файлах. UTF-8 встречается гораздо чаще, поскольку он обратно совместим с ASCII и указан в таких стандартах, как XML.

1) Проверка спецификации различных кодировок Unicode. Если найдено, используйте эту кодировку.
2) Если спецификация отсутствует, проверьте, является ли текст файла действительным UTF-8, читая, пока не достигнете достаточной выборки, отличной от ASCII (так как многие файлы почти все являются ASCII, но могут содержать несколько акцентированных символов или умных кавычек) или файл заканчивается. Если действительный UTF-8, используйте UTF-8.
3) Если не Unicode, это, вероятно, текущая кодовая страница платформы по умолчанию.
4) Некоторые кодировки легко обнаружить, например, японский Shift-JIS будет интенсивно использовать префиксные байты 0x82 и 0x83, указывающие на хирагану и катакана.
5) Дайте пользователю возможность изменить кодировку, если догадка программы окажется неверной.

1 голос
/ 21 января 2010

Latin-1 (ISO-8859-1) и его расширение Windows CP-1252 обязательно должны поддерживаться для западных пользователей. Можно утверждать, что UTF-8 - лучший выбор, но у людей часто нет такого выбора. Для китайских пользователей потребуется GB-18030, и помните, что есть японцы, русские и греки, которые имеют свои собственные кодировки помимо Unicode в кодировке UTF-8.

Что касается обнаружения, большинство кодировок не могут быть обнаружены безопасно. В некоторых (например, Latin-1) некоторые значения байтов просто недопустимы. В UTF-8 может встречаться любое значение байта, но не каждая последовательность значений байтов. Однако на практике вы не будете выполнять декодирование самостоятельно, а будете использовать библиотеку кодирования / декодирования, пытаться декодировать и отлавливать ошибки. Так почему бы не поддерживать все кодировки, которые поддерживает эта библиотека?

Вы также можете разработать эвристику, например, декодирование для определенной кодировки, а затем проверить результат на наличие странных символов или комбинаций символов или частоты таких символов. Но это никогда не будет безопасным, и я согласен с Вилксом, что ты не должен беспокоиться. По моему опыту, люди обычно знают, что файл имеет определенную кодировку или что возможны только два или три. Поэтому, если они увидят, что вы выбрали неправильный вариант, они могут легко адаптироваться. И посмотрите на других редакторов. Самое умное решение не всегда самое лучшее, особенно если люди привыкли к другим программам.

1 голос
/ 20 января 2010

Нет способа определить кодировку. Лучшее, что вы можете сделать, это что-то вроде IE и зависеть от распределения букв на разных языках, а также от стандартных символов для языка. Но это в лучшем случае далеко.

Я бы посоветовал взять в руки большую библиотеку наборов символов (посмотрите проекты, такие как iconv) и сделать все это доступным для пользователя. Но не беспокойтесь об автоопределении. Просто позвольте пользователю выбрать его предпочтение кодировки по умолчанию, которая по умолчанию будет UTF-8.

0 голосов
/ 20 января 2010

Что бы вы ни делали, используйте более 256 байтов для теста сниффа. Важно сделать все правильно, так почему бы не проверить весь документ? Или, по крайней мере, первые 100 КБ или около того.

Попробуйте UTF-8 и очевидный UTF-16 (много чередующихся 0 байтов), затем вернитесь к кодовой странице ANSI для текущей локали.

...