阅读JSON :: XS的文档后,我有点困惑。我的问题是:我如何编码/解码已经在UTF8中的数据?调用encode_json似乎是对它们进行双重编码。我想从散列创建一个JSON,它包含UTF8编码的字符串以及将JSON解码为散列,同时保持UTF8编码的数据。是否有可能,或者我是否需要自己手动编码:: decode_utf8 / encode_utf8数据?
答案 0 :(得分:1)
禁用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中编码的八位字节/二进制字符串。