Perl 错误的 UTF-8 输出
Perl wrong UTF-8 output
我有以下程序:
#! /usr/bin/perl
use strict;
use warnings;
use utf8;
print "\x{00a0}\n";
当我 运行 它时,它产生了错误的 UTF-8 编码:
$ ./nbsp.pl | od -tx1
0000000 a0 0a
0000002
我的期望是这样的:
$ printf '\u00a0\n' | od -tx1
0000000 c2 a0 0a
0000003
为什么 00a0
编码为 a0
而不是应有的 c2a0
?
同样的情况发生,当我尝试解析 JSON 数据时:
#! /usr/bin/perl
use strict;
use warnings;
use JSON::Parse qw(parse_json);
my $json = parse_json ('{"nbsp":"\u00A0"}');
print $json->{nbsp}, "\n";
它不需要 utf8
pragma,而是一个语句来编码输出。最佳使用 open pragma
use strict;
use warnings;
use open ":std", ":encoding(UTF-8)";
print "\x{00a0}\n";
我有以下程序:
#! /usr/bin/perl
use strict;
use warnings;
use utf8;
print "\x{00a0}\n";
当我 运行 它时,它产生了错误的 UTF-8 编码:
$ ./nbsp.pl | od -tx1
0000000 a0 0a
0000002
我的期望是这样的:
$ printf '\u00a0\n' | od -tx1
0000000 c2 a0 0a
0000003
为什么 00a0
编码为 a0
而不是应有的 c2a0
?
同样的情况发生,当我尝试解析 JSON 数据时:
#! /usr/bin/perl
use strict;
use warnings;
use JSON::Parse qw(parse_json);
my $json = parse_json ('{"nbsp":"\u00A0"}');
print $json->{nbsp}, "\n";
它不需要 utf8
pragma,而是一个语句来编码输出。最佳使用 open pragma
use strict;
use warnings;
use open ":std", ":encoding(UTF-8)";
print "\x{00a0}\n";