首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法用Cpanel:: json ::XS解码UTF-8编码的JSON文本

无法用Cpanel:: json ::XS解码UTF-8编码的JSON文本
EN

Stack Overflow用户
提问于 2022-04-05 21:33:59
回答 1查看 105关注 0票数 0

我正在尝试用Cpanel::JSON::XS解码一个UTF-8编码的json字符串。

代码语言:javascript
复制
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引发异常

代码语言:javascript
复制
Wide character in subroutine entry

我也尝试了Cpanel::JSON::XS->new->utf8->decode_json( $str ) (请参阅注释行),但这又给出了另一个错误:

代码语言:javascript
复制
malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)")

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 21:50:09

decode_json期望UTF-8,但您正在提供解码文本(一串Unicode代码点)。

使用

代码语言:javascript
复制
use utf8;
use Encode qw( encode_utf8 );

my $json_utf8 = encode_utf8( '{ "title": "Outlining — How to outline" }' );

my $data = decode_json( $json_utf8 );

代码语言:javascript
复制
use utf8;

my $json_utf8 = do { no utf8; '{ "title": "Outlining — How to outline" }' };

my $data = decode_json( $json_utf8 );

代码语言:javascript
复制
use utf8;

my $json_ucp = '{ "title": "Outlining — How to outline" }';

my $data = Cpanel::JSON::XS->new->decode( $json_ucp );    # Implied: ->utf8(0)

)在我看来,中间的那个似乎很讨厌。如果您从多个源获取数据,而其他来源提供了编码数据,则可以使用第一个。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71758645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档