Понадобилось мне в 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) для юникодного файла
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий