这段简单的代码展示了我在Perl中使用JSON::XS编码时遇到的问题:
这将产生以下输出:
现在,如果我注释掉上面的binmode行,我会得到:
这里发生了什么情况?请注意,我正在尝试在 perl CGI 脚本中修复这种行为,其中无法使用 binmode,但是我始终会在 JSON 流中返回如上所示的 "ü" 字符。我应该如何调试?我错过了什么吗?
#!/usr/bin/perl
use strict;
use warnings;
use JSON::XS;
use utf8;
binmode STDOUT, ":encoding(utf8)";
my (%data);
$data{code} = "Gewürztraminer";
print "data{code} = " . $data{code} . "\n";
my $json_text = encode_json \%data;
print $json_text . "\n";
这将产生以下输出:
johnnyb@boogie:~/Projects/repos > ./jsontest.pl
data{code} = Gewürztraminer
{"code":"Gewürztraminer"}
现在,如果我注释掉上面的binmode行,我会得到:
johnnyb@boogie:~/Projects/repos > ./jsontest.pl
data{code} = Gew�rztraminer
{"code":"Gewürztraminer"}
这里发生了什么情况?请注意,我正在尝试在 perl CGI 脚本中修复这种行为,其中无法使用 binmode,但是我始终会在 JSON 流中返回如上所示的 "ü" 字符。我应该如何调试?我错过了什么吗?
print decode('UTF-8', $json_text, Encode::FB_CROAK) . "\n";
。 - Håkon Hægland