无法使用 Cpanel::JSON::XS 解码 UTF-8 编码的 json 文本
Not able to decode UTF-8 encoded json text with Cpanel::JSON::XS
我正在尝试使用 Cpanel::JSON::XS:
解码 UTF-8 编码的 json 字符串
use strict;
use warnings;
use open ':std', ':encoding(utf-8)';
use utf8;
use Cpanel::JSON::XS;
use Data::Dumper qw(Dumper);
my $str = '{ "title": "Outlining — How to outline" }';
my $hash = decode_json $str;
#my $hash = Cpanel::JSON::XS->new->utf8->decode_json( $str );
print Dumper($hash);
但这会在 decode_json
:
引发异常
Wide character in subroutine entry
我也试过 Cpanel::JSON::XS->new->utf8->decode_json( $str )
(见注释掉的那一行),但这又给出了另一个错误:
malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)")
我在这里错过了什么?
decode_json
需要 UTF-8,但您提供的是解码文本(一串 Unicode 代码点)。
使用
use utf8;
use Encode qw( encode_utf8 );
my $json_utf8 = encode_utf8( '{ "title": "Outlining — How to outline" }' );
my $data = decode_json( $json_utf8 );
或
use utf8;
my $json_utf8 = do { no utf8; '{ "title": "Outlining — How to outline" }' };
my $data = decode_json( $json_utf8 );
或
use utf8;
my $json_ucp = '{ "title": "Outlining — How to outline" }';
my $data = Cpanel::JSON::XS->new->decode( $json_ucp ); # Implied: ->utf8(0)
(中间一个对我来说似乎很老套。如果您从多个来源获取数据,可能会使用第一个,而其他提供编码。)
我正在尝试使用 Cpanel::JSON::XS:
解码 UTF-8 编码的 json 字符串use strict;
use warnings;
use open ':std', ':encoding(utf-8)';
use utf8;
use Cpanel::JSON::XS;
use Data::Dumper qw(Dumper);
my $str = '{ "title": "Outlining — How to outline" }';
my $hash = decode_json $str;
#my $hash = Cpanel::JSON::XS->new->utf8->decode_json( $str );
print Dumper($hash);
但这会在 decode_json
:
Wide character in subroutine entry
我也试过 Cpanel::JSON::XS->new->utf8->decode_json( $str )
(见注释掉的那一行),但这又给出了另一个错误:
malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)")
我在这里错过了什么?
decode_json
需要 UTF-8,但您提供的是解码文本(一串 Unicode 代码点)。
使用
use utf8;
use Encode qw( encode_utf8 );
my $json_utf8 = encode_utf8( '{ "title": "Outlining — How to outline" }' );
my $data = decode_json( $json_utf8 );
或
use utf8;
my $json_utf8 = do { no utf8; '{ "title": "Outlining — How to outline" }' };
my $data = decode_json( $json_utf8 );
或
use utf8;
my $json_ucp = '{ "title": "Outlining — How to outline" }';
my $data = Cpanel::JSON::XS->new->decode( $json_ucp ); # Implied: ->utf8(0)
(中间一个对我来说似乎很老套。如果您从多个来源获取数据,可能会使用第一个,而其他提供编码。)