【问题标题】:Perl serialize UTF8 encoded data with JSONPerl 使用 JSON 序列化 UTF8 编码的数据
【发布时间】:2016-01-12 02:04:45
【问题描述】:

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

【问题讨论】:

标签: json perl encoding utf-8


【解决方案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 中编码的八位字节/二进制字符串。

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2021-09-10
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多