У меня есть текстовый файл, содержащий некоторые китайские иероглифы, такие как 打印机 驱动 程序 安装 磁盘. По умолчанию файл находится в кодовом наборе ANSI. ЕСЛИ я сохраняю его как utf-8 в редакторе Textpad, он работает нормально, двоичные значения правильные, если я открываю сохраненный файл utf-8, это нормально. Но если я преобразовываю исходный файл в utf-8 с помощью iconv, то двоичные значения не совпадают с теми, которые были сохранены в текстовой панели. Если я открываю преобразованный файл, то появляется предупреждение, что символы не существуют в кодовой странице 936. .. это будет преобразовано в системный символ по умолчанию ....

Почему такая разница между сохранением текстового файла в формате utf-8 в textpad и преобразованием файла с помощью iconv?

1 ответ1

4

ANSI

Набор символов ANSI должен означать набор символов, определенный Американским национальным институтом стандартов (ANSI). Однако ANSI определили много разных наборов символов.

Microsoft и другие иногда неправильно используют имя "ANSI" для обозначения кодовой страницы 1252 (CP-1252), также называемой Windows-1252 или Windows-Latin-1. Этот набор символов не был одним из тех, которые определены ANSI. Этот набор символов похож на ISO-8859-1, но имеет много различий. Самое главное для этого вопроса Этот набор символов не включает в себя китайские иероглифы.

CP936

«Кодовая страница 936 - это кодировка символов Microsoft для упрощенного китайского языка, одна из четырех DBCS для языков Восточной Азии. Первоначально он был идентичен GB 2312 и расширен для охвата большей части GBK с выпуском Windows 95; теперь заменено кодовой страницей 54936 (GB 18030). "- Википедия

Iconv

Если вы попросите iconv преобразовать MS-ANSI или ISO-8859-1 в UTF-8, он не сможет интерпретировать какие-либо данные как китайские символы, поскольку в MS-ANSI или ISO-8859-1 таких символов не существует. ,

Вы должны сообщить iconv истинную кодировку вашего текстового файла. Если ваш текстовый файл действительно закодирован в CP936, и iconv сказал об этом, я ожидаю, что он будет работать.

Textpad

См критику текста

Microsoft

Продолжающееся злоупотребление Microsoft именем ANSI является позорным и продолжает вызывать у ее клиентов большую путаницу и потерю времени и денег. Как этот вопрос, вероятно, демонстрирует.

Microsoft действительно говорит: «Термин" ANSI ", используемый для обозначения кодовых страниц Windows, является историческим справочником и неправильным обозначением, которое сохраняется в сообществе Windows. Источник этого неправильного названия проистекает из того факта, что кодовая страница Windows 1252 изначально была основана на проекте ANSI, который стал стандартом Международной организации по стандартизации (ISO) 8859-1 [ISO/IEC-8859-1]. В Windows набор символов ANSI может быть любой из следующих кодовых страниц: 1252, 1250, 1251, 1253, 1254, 1255, 1256, 1257, 1258, 874, 932, 936, 949 или 950 ».

Обратите внимание на включение CP-936 в этот список.

К сожалению, многие другие веб-страницы на microsoft.com неправильно используют термин ANSI.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .