Могу ли я избежать использования CP1252 в Windows?

StackOverflow https://stackoverflow.com/questions/1942746

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top