Можно ли избежать использования CP1252 в Windows? - PullRequest
3 голосов
/ 22 декабря 2009

Я бы хотел, чтобы весь мой инструментарий использовал UTF-8 , но обнаружил, что некоторые инструменты в Windows, похоже, используют CP1252 (что, похоже, относится к Windows). Создает ли это вывод, который несовместим, и если да, то в каких точках кода? Если да, могу ли я что-нибудь с этим сделать?

(я не до конца понимаю проблемы, поэтому буду благодарен за базовое образование по этим кодировкам).

Ответы [ 5 ]

6 голосов
/ 22 декабря 2009

Инструменты жесткого кодирования для кодовой страницы 1252 в Windows очень маловероятны. Гораздо более вероятно, что это кодовая страница по умолчанию на вашем компьютере. 1252 используется в Западной Европе и Америке. Это настраивается в панели управления, региональных и языковых опций. Они используют разные имена для него, на Win7 это находится на вкладке Администрирование, Изменить системный языковой стандарт.

Да, многие инструменты используют кодовую страницу по умолчанию, если у них нет веских причин для выбора другой кодировки. Спецификация такая веская причина. Яркими примерами являются Блокнот (если вы не измените кодировку в диалоге File + Open на что-то другое, кроме Ansi) и компиляторы C / C ++. Обычно нет ничего особенного, что вам нужно сделать, чтобы использовать кодовую страницу по умолчанию. Угадать правильную кодовую страницу для текстового файла, когда у вас нет спецификации, невозможно сделать точно. Google "куст скрыл факты" для очень забавной военной истории.

5 голосов
/ 22 декабря 2009

Шесть лет и все еще актуально: Абсолютный минимум каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без оправданий!)

Теперь по вашему вопросу: да, есть еще инструменты, которые душат файлы UTF-8. Но все больше и больше инструментов «получают это». Если вы разрабатываете свои собственные вещи, вы можете заглянуть в Python 3, где все строки Unicode. Философия заключается в том, чтобы преобразовать все ваши входные данные в Unicode (при необходимости) как можно раньше и преобразовать их в целевую кодировку как можно позже. Существуют наборы инструментов, которые помогут определить угадывание определенного файла (например, Mark Pilgrim chardet , порт детектора кодирования Mozilla ). Это хорошо, если вы работаете с файлами, в которых не указана кодировка.

5 голосов
/ 22 декабря 2009

CP1252 и UTF-8 одинаковы для всех символов <128. Они отличаются выше этого. Поэтому, если вы будете придерживаться английского языка и держаться подальше от диакритических знаков, это будет то же самое. </p>

Большинство инструментов Windows будут использовать все, что установлено в качестве текущей кодовой страницы текущего пользователя, по умолчанию 1252 для Windows Windows. Вы можете легко изменить это на другую кодовую страницу. Но UTF-8 НЕ является одним из доступных вариантов кодовой страницы для Windows. (Хотелось бы, чтобы это было).

2 голосов
/ 22 декабря 2009

Некоторые утилиты под Windows распознают метку порядка байтов UTF-8 в начале файла. К сожалению, я не знаю, как определить, будет ли это работать, кроме как попробовать.

1 голос
/ 23 декабря 2009

UTF-8 поддерживается в Windows, но не как текущая кодовая страница. Вы можете использовать UTF-8 для конвертации в / из него, но вы не можете установить его как текущую кодовую страницу.

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

Единственное реальное решение для вас - это построить ваше приложение как Unicode, чтобы оно использовало UTF-16 , и преобразовывать в / из UTF-8 при операциях ввода / вывода. Это сделано довольно просто, потому что fopen поддерживает чтение или запись UTF-8.

Что касается использования других инструментов Windows с файлом UTF-8, вам не следует об этом знать, потому что, если инструмент способен работать с ASCII, он будет работать с UTF-8 (даже если он не сможет различить Unicode chars, но, по крайней мере, он сможет загружать / анализировать файлы).

Кстати, вы забыли указать, какой язык программирования вы используете и какие инструменты Windows вы рассматриваете для использования.

Кроме того, если вы заинтересованы в большем количестве материалов по интернационализации, посетите мой blog.i18n.ro

...