我从包含半utf8编码的文件中读取行,并且我希望将其转换为Perl内部表示以进行进一步操作.
file.in(纯ASCII):
MO\\xc5\\xbdN\\xc3\\x81
NOV\\xc3\\x81
Run Code Online (Sandbox Code Playgroud)
这些应转换为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"; };
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有成功.
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';
Run Code Online (Sandbox Code Playgroud)
从下往上阅读.