Windows 7 UTF-8 и Unicode

Может кто-нибудь объяснить, что изменилось в Windows 7 (Pro 64-bit)?

Подробности: Раньше у меня была Windows XP и у меня были файлы переводов (кодировка UTF-8) в формате CSV. Мне удалось просмотреть шрифты как в «Блокноте», так и в Excel. После обновления до Windows 7, когда я открываю эти файлы, все, что я вижу, это квадратные прямоугольники (только вы знаете, если я открою их в браузере – я смог увидеть весь перевод). Если я сохраню эти файлы в Юникоде, все будет хорошо.

Итак, что именно происходит? Почему Windows 7 работает с Unicode, а не с UTF-8?

2 Solutions collect form web for “Windows 7 UTF-8 и Unicode”

Почему Windows 7 работает с Unicode, а не с UTF-8?

терминология

Unicode и UTF-8 – это не одно и то же: Unicode – это набор символов, который определяет набор символов (репертуар) и присваивает номера (кодовые точки) каждому из этих символов. UTF-8 является одним из нескольких кодировок, которые могут использоваться для представления потока символов Unicode на диске или в передаче. Один и тот же поток символов Юникода также может быть закодирован, например, как UTF-16, UTF-32 или UTF-7.

Тем не менее, «Блокнот» предлагает вам «кодирование» опций, включая ANSI , Unicode , Unicode big-endian и UTF-8 . Разработчики Microsoft, которые написали это, использовали неправильные термины. Когда они говорят «Юникод», они скорее всего означают « UTF-16 little-endian ». Когда они говорят «ANSI», они означают код Page 1252 (CP-1252).

Блокнот Microsoft

Я полагаю, что Блокнот Microsoft пишет UTF-16 с байтом байта ( BOM ) и что Notepad ищет спецификацию при чтении текстового файла. Спецификация сообщает приложению, что файл UTF-16 и указывает, является ли он широкоформатным или малозначным.

Если Notepad не находит спецификацию, она вызывает библиотечную функцию IsTextUnicode , которая просматривает данные и пытается угадать, какая кодировка была использована. Иногда (неизбежно) он догадывается неправильно. Иногда он догадывается, что файл ANSI «Unicode». Попытка интерпретировать файл UTF-16 или UTF-8 как код Страница 1252 приведет к тому, что он отобразит неправильные глифы и не сможет найти глифы, чтобы отображать некоторые 8-битные значения – они затем будут показаны как квадраты.

Как говорит гарримк в своем ответе , в «Блокноте» есть лучшие альтернативы. Но Notepad позволяет вам явно выбирать кодировку при открытии файла (а не оставлять блокнот, чтобы попытаться угадать).

Знаки порядка байтов

Согласно консорциуму Unicode, байтовые байты (спецификации) являются необязательными. Однако Windows использует спецификации для различения некоторых кодировок.

Короче говоря, возможно, у ваших файлов по какой-то причине не было спецификации? Может быть, спецификация была потеряна когда-то во время процесса обновления?

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


Стандартные текстовые файлы

Проблема в том, что нет фактически никаких универсальных стандартов для текстовых файлов. Вместо этого у нас есть ряд несовместимых и неизвестных.

  • Как были отмечены концы строк? На некоторых платформах используются управляющие символы Carriage Return (CR), за которыми следует Line Feed (LF), некоторые используют CR самостоятельно, а некоторые используют LF.

  • Являются ли указанные выше терминаторы или разделители? Это влияет на конец файла и, как известно, вызывает проблемы.

  • Обработка вкладок и других управляющих символов. Мы можем предположить, что вкладка используется для выравнивания с кратким 8 стандартными ширинами символов с начала строки, но на самом деле нет уверенности в этом. Многие программы позволяют изменять позиции табуляции.

  • Набор символов и кодировка? Нет универсального стандарта для указания того, какие из них были использованы для текста в файле. Ближайшим нам является поиск наличия спецификации, которая указывает, что кодировка является одной из тех, которые используются для Unicode. Из значения BOM программа, считывающая файл, может различать UTF-8 и UTF-16 и т. Д., А также варианты Little-Endian и Big-Endian UTF-16 и т. Д. Нет универсального стандарта для указания того, что файл Кодируется в любой другой популярной кодировке, такой как CP-1252 или KOI-8.

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

Буш скрыл факты

Попробуйте это в Windows XP.

  • Откройте Блокнот.
  • Установите шрифт в Arial Unicode MS. (Возможно, вам придется сначала установить его, если вы не видите его в меню, нажмите «Показать больше шрифтов».)
  • Введите текст «Буш спрятал факты».
  • Выберите « Save As . В меню « Encoding выберите ANSI .
  • Закройте Блокнот.
  • Повторно Start документ (например, с помощью « Start , « My Recent Documents ).
  • Вы увидите 畂 桳 栠 摩 琠 敨 映 捡 獴 вместо «Буша спрятали факты».

Это иллюстрирует, что функция IsTextUnicode используемая Notepad, неправильно предполагает, что текст ANSI (действительно код страницы 1252) является Unicode UTF-16LE без спецификации. В файле, сохраненном как ANSI нет спецификации.

Windows 7

В Windows 7 Microsoft настроил IsTextUnicode чтобы вышеупомянутое не произошло. В отсутствие спецификации, теперь более вероятно угадать ANSI (CP 1252), чем Unicode (UTF-16LE). С Windows-7 я ожидаю, что у вас, скорее всего, возникнет обратная проблема: файл с символами Unicode с кодовыми точками больше 255, но без спецификации, теперь более вероятно, будет считаться ANSI – и поэтому отображается неправильно.

Предотвращение проблем с кодированием

В настоящее время лучше всего использовать UTF-8 везде. В идеале вы бы перекодировали все старые текстовые файлы в UTF-8 и только сохраняли текстовые файлы как UTF-8. Есть инструменты, такие как recode и iconv, которые могут помочь в этом.

Замечание. Вы можете использовать Notepad ++ для просмотра файлов тезисов, используя меню «Кодирование».

Как только файлы будут отображаться правильно, их сохранение добавит правильную спецификацию.

  • Домашняя беспроводная сеть через Bluetooth
  • Как исправить UnsatisfiedLinkError (не удается найти зависимые библиотеки) в проекте JNI
  • Не удается установить драйверы для Windows XP. Программа слишком большая, чтобы поместиться в памяти
  • Windows создает псевдоним каталога?
  • Запуск XP в качестве виртуальной машины - пожелания
  • Интерактивный режим запланированной задачи Windows (GUI)
  • Перемещение медленного каталога Windows XP
  • Есть ли способ вручную перезапустить графические драйверы в Windows XP?
  • Как получить виртуальную машину VMware XP через соединение WIFI для хоста Windows 7?
  • Активация неподлинной версии Windows XP с использованием подлинного ключа
  • Очистка диска Windows: опция «Сжатие старых файлов»
  • Давайте будем гением компьютера.