如何在Perl中使用JSON 1.x将包含字符串的对象/哈希编码为latin1?

时间:2013-05-22 10:18:57

标签: json perl

我有一个CMS和一个使用旧的perl JSON模块(版本1.54)的服务器。 我需要将带有字符串的哈希/对象编码为latin-1(目标页面是8859-1编码的)。

如何做到这一点?

到目前为止我的代码:

use JSON;

my $json = JSON->new();
$json->to_json($str),

2 个答案:

答案 0 :(得分:2)

JSON 2.x模块具有$json->ascii$json->latin1方法,它们告诉模块分别用等效的{替换ASCII和ISO-8859-1字符集之​​外的字符。 {1}}转义序列。

不幸的是,JDS模块的1.x版本显然(感谢Quentin!)没有这些方法。但是,鉴于非ASCII字符不应出现在有效JSON中 outside 字符串的任何地方,应该可以在编码步骤之后将它们转义为,如下所示:

\uNNNN

请注意,上述替换不适用于基本多语言平面以外的字符(即代码点高于U + FFFF)。要处理这些问题,我们需要使用surrogate pairs,这可能最好在单独的传递中处理:

use JSON;
my $output = to_json( $data );

# encode non-ASCII characters as \uNNNN escapes:
$output =~ s/([^\x20-\x7e])/sprintf "\\u%04x", ord $1/eg;

答案 1 :(得分:1)

我认为你的意思是将perl数据结构编码为JSON,或者将字符串(采用JSON格式)解码为perl数据结构。

但就将字符串编码为latin-1而言,您是否尝试过Encode