如何在Perl中将十六进制转换为字符串

时间:2012-11-01 09:20:43

标签: perl unicode hex

我正在使用Perl,我收到了一个字符串:

  

agn \ u00e8s b

如何将其转换为

  

agnèsb

我尝试使用以下代码。

my $hex = "agn\u00e8s b";
$hex =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
print "$hex\n";

但它失败并显示出一些奇怪的性格。更重要的是,我还需要显示中文单词。例如,

  

\ u9eb5 \ u5305

如何将其转换为以下内容?

  

面包

2 个答案:

答案 0 :(得分:3)

my $s = "agn\\u00e8s b";
$s =~ s/\\u(....)/chr(hex($1))/eg;
print "$s\n";

不要忘记对输出进行编码

use open ':std', ':encoding(UTF-8)';

答案 1 :(得分:0)

使用此:

  

$ hex = ~s /(\ u [a-fA-F0-9] [a-fA-F0-9] [a-fA-F0-9] [a-fA-F0-9])/ encode('utf-8',chr(hex($ 1)))/ eg;