Perl使用JSON序列化UTF8编码数据

时间:2015-10-14 05:54:38

标签: json perl encoding utf-8

阅读JSON :: XS的文档后,我有点困惑。我的问题是:我如何编码/解码已经在UTF8中的数据?调用encode_json似乎是对它们进行双重编码。我想从散列创建一个JSON,它包含UTF8编码的字符串以及将JSON解码为散列,同时保持UTF8编码的数据。是否有可能,或者我是否需要自己手动编码:: decode_utf8 / encode_utf8数据?

1 个答案:

答案 0 :(得分:1)

请参阅perldoc for Json::XS

  

禁用utf8标志

     

当禁用utf8(默认值)时,则编码/解码生成并期望Unicode字符串,即具有高序数的字符   Unicode值(> 255)将被编码为这样的字符,和   同样,这些字符按原样解码,不会对它们进行任何改变   完成,除了“(重新)解释”它们为Unicode代码点或Unicode   字符分别(对于Perl,这些在字符串中是相同的   除非你做有趣/怪异/愚蠢的事情。)

     

当您想自己进行编码时(例如,当您想要使用UTF-16编码的JSON文本时)或其他一些编码时,这非常有用   图层为您执行编码(例如,打印到   终端使用透明编码为UTF-8的文件句柄   当然不希望UTF-8首先对您的数据进行编码并使用Perl   再编码一次)。

     

启用了utf8标志

     

如果启用了utf8-flag,则encode / decode将使用相应的UTF-8多字节序列对所有字符进行编码,并且   期望您的输入字符串被编码为UTF-8,即不   输入字符串的“字符”必须具有任何值> 255,为UTF-8   不允许这样做。

     

因此utf8标志在两种模式之间切换:禁用意味着你将在Perl中获得一个Unicode字符串,启用意味着你得到一个UTF-8   Perl中编码的八位字节/二进制字符串。