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

3

我将从一个包含半UTF-8编码的文件中读取行,并希望将其转换为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"; };
}

很抱歉,没有成功。

啊,你没有清楚地表明你的样本输入文件看起来确实像那样。我以为你只是试图让其中的十六进制值更清晰。删除了我的答案,因为Daxim的答案对于这样的文件是正确的。 - Mithaldu
1个回答

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';

从下往上阅读。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接