2013-07-12 3 views
3

Я читал строки из файла, который содержит кодировку sem-utf8, и я хочу преобразовать его в Perl-внутреннее представление для дальнейших операций.Как декодировать строку с двойным обратным сбрасыванием PERLQQ в символы Perl?

file.in (обычный ASCII):

MO\\xc5\\xbdN\\xc3\\x81 
NOV\\xc3\\x81 

Они должны перевести MOŽNÁ и NOVA.

Я загружаю линии и обновляю их до нужной нотации utf8, т.е. \\xc5\\xbd -> \x{00c5}\x{00bd}. Тогда я хотел бы воспользоваться этой модернизированной $line и сделать Perl, чтобы представить его внутренне:

for my $line (@lines) { 
    $line =~ s/x(..)/x{00$1}/g; 
    eval { $l = "$line"; }; 
} 

К сожалению, без успеха.

+0

Ах, вы не дали понять, что ваш образец входного файла выглядит буквально так. Я думал, вы только что попытались дать понять, какие шестнадцатеричные значения есть. Удалил мой ответ, потому что Daxim является правильным для такого файла. – Mithaldu

ответ

5
use File::Slurp qw(read_file); 
use Encode qw(decode); 
use Encode::Escape qw(); 

my $string = 
    decode 'UTF-8',    # octets → characters 
    decode 'unicode-escape', # \x → octets 
    decode 'ascii-escape',  # \\x → \x 
    read_file 'file.in'; 

Читайте снизу вверх.

+0

Отлично, теперь с преобразованием октетов он работает хорошо! Благодаря! –