Как написать текстовый файл с кодировкой ANSI (Western Windows-1252) на PHP

fwrite функция PHP или file_put_content не заботится о метаданных файла, он просто записывает данные в хранилище и все. Это приводит к простой гипотезе, что кодировка текстового файла определяется его данными, поэтому вам необходимо преобразовать данные, которые вы будете записывать в файл, в определенный формат.

На некоторых предприятиях этот процесс необходим, так как программное обеспечение других крупных компаний устарело и плохо работает с кодировкой UTF-8 по умолчанию, поэтому вам необходимо обязательно изменить кодировку созданных вами файлов на именованную » ANSI «кодификация. Термин «ANSI» применительно к 8-битным кодовым страницам Microsoft является неправильным. Они были основаны на проектах, представленных для стандартизации ANSI, но сама ANSI никогда не стандартизировала их. Windows-1252 (кодовая страница, чаще всего называемая «ANSI») аналогична ISO 8859-1 (Latin-1), за исключением того, что Windows-1252 имеет печатаемые символы в диапазоне 0x80..0x9F, где ISO 8859-1 имеет контрольные символы в этом диапазоне. Unicode также имеет управляющие символы в этом диапазоне.

В PHP вы можете добиться этого, используя функцию iconv, пытаясь обнаружить кодировку ваших данных (обычно UTF-8) и преобразовать их в новый формат, а именно Windows-1252 (CP1252):

Выходной файл будет автоматически распознан вашим любимым текстовым редактором в кодировке Windows-1252:

Windows 1252 Текст PHP

И это все нормально. Если содержимое ваших файлов не имеет специальных символов, содержимое может быть распознано текстовым редактором как UTF-8, поэтому ваш единственный вариант будет использовать инструмент CLI для преобразования кодировки файла (читай следующий абзац).

Если файл все еще без правильной кодировки

Если после использования простого PHP для написания содержимого вручную в вашем файле не используется нужная кодировка в содержимом файла, вам может понадобиться использовать вместо системного уровня способ установки кодировки файла.

Предпочтительный и самый простой способ сделать это с помощью CLI - это iconv. Этот инструмент CLI преобразует кодировку символов во входном файле из одного набора кодированных символов в другой. Результат записывается в стандартный вывод, если иное не указано параметром --output или просто перенаправлением вывода с помощью cli, например:

iconv -t CP1252 -f UTF-8 "input_file.txt" > "encoded_output_file.txt"

Вы можете использовать Exec функция PHP запустить программу iconv с указанными аргументами, доступную в любой ОС на базе UNIX или в Windows (используя Cygwin).

Как уже упоминалось, большинство текстовых редакторов, которые используют автоматический детектор кодирования, решают, какую кодировку использовать в соответствии с содержимым, поэтому обычно, хотя строки, хранящиеся в файле с PHP, которые имеют кодировку Windows-1252 (CP1252), UTF-8 режим будет использоваться. Это означает, что обнаружение кодировки на основе содержимого основано только на эвристике, поэтому не гарантирует правильности кодировки, используемой для открытия файла.

Однако содержимое не обманывает, поэтому, если вы попытаетесь открыть содержимое файла в кодировке Windows-1252 в кодировке UTF-8, вы увидите странные символы в текстовом редакторе:

Windows1252 (CP1252) текст, открытый с помощью UTF-8

Однако если текстовый редактор считывает содержимое файла с кодировкой Windows-1252 (CP1252), он будет прочитан правильно:

Windows 1252 (CP1252) открыта с правильной кодировкой

Ссылка на основную публикацию
Adblock
detector