我正在使用一些期望拉丁字母表的字符串数据(并忽略perl的UTF8标志)的XS模块。在某些情况下,我正在传递JSON解码的结果,它应该仅包含拉丁字母表中的字符,但在某些情况下已被转义(例如["co\u00f6perative"]
)。
是否有一种JSON解码模块提供了一个选项,可以降级返回字符串(至少在可能的情况下)?我没有在JSON、JSON::XS或Cpanel::JSON::XS中找到这样的选项。
use strict;
use warnings;
use Cpanel::JSON::XS;
use Devel::Peek;
my $got = Cpanel::JSON::XS->new->decode('["co\u00f6perative"]')->[0];
Dump $got;
my $wanted = $got;
utf8::downgrade($wanted);
Dump $wanted;
输出:
SV = PV(0xd6cbf0) at 0xd8a460
REFCNT = 1
FLAGS = (POK,IsCOW,pPOK,UTF8)
PV = 0xd83b40 "co\303\266perative"\0 [UTF8 "co\x{f6}perative"]
CUR = 12
LEN = 14
COW_REFCNT = 0
SV = PV(0xd6cb20) at 0xd977f0
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0xe0d120 "co\366perative"\0
CUR = 11
LEN = 14
File::Find
也有类似的功能。也许我会写点什么。 - Borodin