perl的:一个字符串转换为UTF-8 JSON解码(perl: convert a string

2019-07-29 11:52发布

我爬行一个网站,并从它的JSON收集信息。 结果保存在一个散。 但一些页面给我“在JSON字符串格式不正确的UTF-8字符”错误。 我注意到,在“咖啡馆”的最后一个字母会产生误差。 我想这是因为字符类型的混合。 所以,现在我正在寻找一种方式来所有类型的字符转换为UTF-8(希望有一个完美的方式类似)。 我试图UTF8 ::所有,它只是不工作(也许我没有做是正确的)。 我是小白。 请帮忙,谢谢。


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 );

希望这会帮助另外一个人。

Answer 1:

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));

但是,你可以简单地告诉JSON的字符串已解码。

use utf8;
use JSON qw( );

my $data_json = qq( { "cat" : "Büster" } );
my $data = JSON->new->utf8(0)->decode($data_json);


文章来源: perl: convert a string to utf-8 for json decode