2012-02-19 4 views
0

Мне нужно проанализировать файл в perl. Файл находится в формате UTF 16 le, но мне нужен файл в формате UTF 8. Я преобразовал файл и сохранил его в новом файле, однако у меня возникла проблема с новым символом строки.Ошибка формата файла в Perl

В исходном файле каждая новая строка представлена ​​как 0d 00 0a 00 (возврат каретки и новая строка), однако в преобразованном файле я вижу только 0d вместо 0d 0a. Проблема в том, что в следующий раз, когда я пытаюсь прочитать файл, он читает весь файл как 1 строку. Чтобы преобразовать файл, все, что я делаю, это прочитать файл в формате UTF 16 и записать его в UTF 8. Не могли бы вы рассказать мне, как я могу добавить 0a в конце?

+2

Вы описали результат, но вы не указали свой код. Пожалуйста, покажите свой код. –

+2

Вы, возможно, «chomp'ing ваш вход (таким образом удаляя LF и оставляя только CR)? – cjm

+1

Просто используйте 'iconv' для преобразования вашего файла. – n0rd

ответ

0

Поскольку вы не указали какой-либо код (что я предлагаю вам, для более релевантных предложений), я бы вслепую рекомендовал следующее: Encode::Unicode.

+0

[piconv] (http://p3rl.org/piconv), содержащиеся в том же дистрибутиве, является подходящим инструментом командной строки для преобразования кодировки. – daxim

1

Спасибо за ваши ответы. Мне удалось добавить новый символ линии, просто напечатав новую строку. Код, который я использовал был

open IN, '<:raw:encoding(UTF-16LE)', $input; 
open (OUT,"> $sOutFile"); 
my $count = 0; 
while (defined ($sLine = <IN>)) 
{ 
    if ($count == 0) // Delete first line as not needed 
    { 
     $count = 1; 
     next; 
    } 
chomp $sLine; 
print OUT $sLine."\x0A"; // To get new line 
} 

Я знаю, что это не самый лучший способ (даже для удаления первой линии), но он работал.

Приносим извинения за поздний ответ.

Смежные вопросы