0

我正在使用这段代码:

use Unicode::UTF8 qw[decode_utf8 encode_utf8];
my $d = "opposite Spencer\u2019s Aliganj, Lucknow";
my $string = decode_utf8($d);
my $octets = encode_utf8($d);
print "\nSTRING :: $string";

我想要像这样的输出

opposite Spencer's Aliganj, Lucknow

该怎么办 ?

4

2 回答 2

1
于 2013-10-18T06:56:35.633 回答
0

您正在尝试解析屠杀的 JSON。

你可以自己解析。

use Encode qw( decode );

my $incomplete_json = "opposite Spencer\u2019s Aliganj, Lucknow";

my $string = $incomplete_json;
$string =~ s{\\u([dD][89aAbB]..)\\u([dD][cCdDeEfF]..)|\\u(....)}
            { $1 ? decode('UTF-16be', pack('H*', $1.$2)) : chr(hex($3)) }eg;

或者您可以修复它然后使用现有的解析器

use JSON::XS qw( decode_json );

my $incomplete_json = "opposite Spencer\u2019s Aliganj, Lucknow";

my $json = $incomplete_json;
$json =~ s/"/\\"/g;
$json = qq{["$json"]};

my $string = decode_json($json)->[0];

未经测试。您可能需要处理其他斜线。哪种解决方案更简单取决于您必须如何处理其他斜杠。

于 2013-10-18T14:04:22.137 回答