Iva*_*ang 6 perl json decode utf-8
我正在抓取一个网站并从其JSON收集信息.结果保存在哈希中.但是有些页面给出了"JSON字符串中格式错误的UTF-8字符"错误.我注意到"cafe"中的最后一个字母会产生错误.我认为这是因为字符类型的混合.所以现在我正在寻找一种方法将所有类型的角色转换为utf-8(希望有一种完美的方式).我试过utf8 :: all,它只是不起作用(也许我做得不对).我是个菜鸟.请帮忙,谢谢.
UPDATA
好吧,在我阅读了文章" 了解字符串和UTF-8字符串之间的区别 "后,发布者:brian d foy.我用代码解决了这个问题:
use utf8;
use Encode qw(encode_utf8);
use JSON;
my $json_data = qq( { "cat" : "Büster" } );
$json_data = encode_utf8( $json_data );
my $perl_hash = decode_json( $json_data );
Run Code Online (Sandbox Code Playgroud)
希望这有助于其他人.
ike*_*ami 20
decode_json
期望JSON使用UTF-8编码.
虽然您的源文件是使用UTF-8编码的,但您可以使用Perl解析它use utf8;
(如您所愿).这意味着您的字符串包含Unicode字符,而不是表示这些字符的UTF-8字节.
如您所示,您可以在将字符串传递给之前对其进行编码decode_json
.
use utf8;
use Encode qw( encode_utf8 );
use JSON qw( decode_json );
my $data_json = qq( { "cat" : "Büster" } );
my $data = decode_json(encode_utf8($data_json));
Run Code Online (Sandbox Code Playgroud)
但你可以简单地告诉JSON该字符串已被解码.
use utf8;
use JSON qw( );
my $data_json = qq( { "cat" : "Büster" } );
my $data = JSON->new->utf8(0)->decode($data_json);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14852 次 |
最近记录: |