Latin-1 (ISO-8859-1) и его расширение для Windows CP-1252 обязательно должны поддерживаться западными пользователями. Можно утверждать, что UTF-8 - лучший выбор, но у людей часто нет такого выбора. Китайским пользователям потребуется GB-18030, и помните, что есть и японцы, и русские, и греки, у которых есть собственные кодировки, помимо Unicode в кодировке UTF-8.
Что касается обнаружения, большинство кодировок не поддаются надежному обнаружению. В некоторых (например, Latin-1) определенные байтовые значения просто недопустимы. В UTF-8 может встречаться любое байтовое значение, но не каждая последовательность байтовых значений. На практике, однако, вы бы не стали выполнять декодирование самостоятельно, а использовали бы библиотеку кодирования / декодирования, пытались бы декодировать и отлавливать ошибки. Так почему бы не поддержать все кодировки, поддерживаемые этой библиотекой?
Вы также можете разработать эвристику, такую как декодирование для определенной кодировки, а затем проверить результат на наличие странных символов или комбинаций символов или частоты появления таких символов. Но это никогда не будет безопасно, и я согласен с Вилксом, что тебе не стоит беспокоиться. По моему опыту, люди обычно знают, что файл имеет определенную кодировку или что возможно только два или три. Поэтому, если они видят, что вы выбрали неправильный вариант, они легко адаптируются. И посмотрите на других редакторов. Самое умное решение не всегда является лучшим, особенно если люди привыкли к другим программам.
person
thieger
schedule
20.01.2010