如何将双反斜杠PERLQQ转义字符串解码为Perl字符?

时间:2013-07-12 10:50:05

标签: perl utf8-decode

我从包含半utf8编码的文件中读取行,并且我希望将其转换为Perl内部表示以进行进一步操作。

file.in(纯ASCII):

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

这些应转换为MOŽNÁ和NOVÁ。

我加载行并将它们升级到正确的utf8表示法,即。 \\xc5\\xbd -> \x{00c5}\x{00bd}。然后我想采用升级后的$line并使perl在内部表示它:

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

不幸的是,没有成功。

1 个答案:

答案 0 :(得分: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';

从下往上阅读。