我正在使用此代码:
use Unicode::UTF8 qw[decode_utf8 encode_utf8];
my $d = "opposite Spencer\u2019s Aliganj, Lucknow";
my $string = decode_utf8($d);
my $octets = encode_utf8($d);
print "\nSTRING :: $string";
我想输出
opposite Spencer's Aliganj, Lucknow
该怎么办?
答案 0 :(得分:1)
如果您只想让unicode #2019
成为’
,您可以使用以下方法之一:
use strict;
use warnings;
use open ':std', ':encoding(utf-8)';
print chr(0x2019);
print "\x{2019}"; # for characters 0x100 and above
print "\N{U+2019}";
perl中的 \u \U
在perl中转换为大写:
案例转换运算符使用Unicode案例转换表 何时提供字符输入。请注意uc()或\ U in 插值字符串,转换为大写,而ucfirst或\ u in 插值字符串,转换为使用的语言中的标题 区别(相当于没有语言的大写 区别)。
答案 1 :(得分:0)
你正在尝试解析屠杀JSON。
你可以自己解析它。
use Encode qw( decode );
my $incomplete_json = "opposite Spencer\u2019s Aliganj, Lucknow";
my $string = $incomplete_json;
$string =~ s{\\u([dD][89aAbB]..)\\u([dD][cCdDeEfF]..)|\\u(....)}
{ $1 ? decode('UTF-16be', pack('H*', $1.$2)) : chr(hex($3)) }eg;
或者您可以修复它然后使用现有的解析器
use JSON::XS qw( decode_json );
my $incomplete_json = "opposite Spencer\u2019s Aliganj, Lucknow";
my $json = $incomplete_json;
$json =~ s/"/\\"/g;
$json = qq{["$json"]};
my $string = decode_json($json)->[0];
未测试。您可能必须处理其他斜杠。哪种解决方案更简单取决于您必须如何处理其他斜杠。