shumar
Зарегистрирован: 13.01.2007 Сообщения: 2
|
Добавлено: Сб Янв 13 2007 22:07 Заголовок сообщения: Обработка юникод файлов на Perl |
|
|
Есть один большой юникод файл, необходимо сделать из него несколько маленьких файлов, разбив исходный на несколько частей.
По сути первые несколько строк копируются в первый файл, следующие - во второй и т.д.
Проблема в том, что у всех файлов кроме первого не выставляются юникод байты вначале файла, которые нужны для разпознавания кодировки.
Как можно их выставить их вручную(байты 0xEF, 0xBB, 0xBF), или как автоматически создавать юникод файл где они уже выставлены? |
|
Ajaja
Зарегистрирован: 31.01.2007 Сообщения: 1
|
Добавлено: Ср Янв 31 2007 17:42 Заголовок сообщения: Re: Обработка юникод файлов на Perl |
|
|
shumar писал(а): | Есть один большой юникод файл, необходимо сделать из него несколько маленьких файлов, разбив исходный на несколько частей.
По сути первые несколько строк копируются в первый файл, следующие - во второй и т.д.
Проблема в том, что у всех файлов кроме первого не выставляются юникод байты вначале файла, которые нужны для разпознавания кодировки.
Как можно их выставить их вручную(байты 0xEF, 0xBB, 0xBF), или как автоматически создавать юникод файл где они уже выставлены? |
Для UTF-8:
Код: | open(F,">:raw:crlf:utf8",$file);
print F "\x{FEFF}"; |
Для других кодировок:
Код: | open(F,">:raw:encoding(UTF-16LE):crlf:utf8",$file);
print F "\x{FEFF}"; |
Считывать файлы желательно тоже в правильной кодировке:
Код: | open(F,"<:raw:crlf:utf8",$file); |
или например:
Код: | open(F,"<:raw:encoding(UTF-16BE):crlf:utf8",$file); |
Вообще в перле очень удобная работа с кодировками. Пример преобразование CP866->UTF-16LE:
Код: | open(F1,"<:raw:encoding(CP-866):crlf:utf8",$ARGV[0]) or die "Cannot open file: $ARGV[0] \n $!";
open(F2,">:raw:encoding(UTF-16LE):crlf:utf8",$ARGV[1]) or die "Cannot create file: $ARGV[1] \n $!";
print F2 "\x{FEFF}";
print F2 while <F1>;
close F1;
close F2; |
|
|