воскресенье, 16 ноября 2008 г.

Perl и Unicode Windows.

Понадобилось мне в perl открыть и почитать файлик из винды в юникоде. И еще в файлике отсутствовал BOM (FF FE в первых байтах). Это был фрагмент из большого файла.
Локаль у меня utf8.

open (TXT, '<:encoding(UTF16)','file.txt') or die; c ходу не открыл, так как не нашел нужных ему первых байт и ругнулся на неверный BOM. решение: без явного указания перл принимает юникод "big-endian", а надо "little endian" и ругается на неверный BOM. Укажем явно кодировку UTF16-LE open (TXT, '<:encoding(UTF16-LE)','file.txt') or die; теперь порядок. Запись в файл аналогична открытию. open (TXT, '>:encoding(UTF16-LE)','file.txt') or die;

при этом BOM запишется сам в начало файла, если понадобиться записать его принудительно, то можно сделать так:

print TXT "\x{FEFF}"; # запись BOM (Byte Order Mark) для юникодного файла

Комментариев нет:

Отправить комментарий