Perl unicode转换

时间:2013-10-18 06:09:49

标签: perl unicode

我正在使用此代码:

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

该怎么办?

2 个答案:

答案 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];

未测试。您可能必须处理其他斜杠。哪种解决方案更简单取决于您必须如何处理其他斜杠。