2012-11-01 28 views
2

我使用Perl和我得到的字符串:如何十六进制转换为字符串在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

如何将其转换为以下?

面包

回答

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

不要忘了你的编码输出

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

如果上面的代码被包含在一个文件中,最后一行在上面,然后是三行,那么它产生了输出:agn00e8s b。既然您要求对输出进行编码,那么文件中有什么不妥之处呢? – stackoverflowery

+0

@Neeraj Tuteja,这是因为OP的输入(我盲目复制)是不正确的。固定。对不起,我之前没有注意到你的评论。 – ikegami

0
使用

此:

$十六进制=〜S /(\ U [A-FA-F0-9] [A-FA-F0-9] [ ('utf-8',chr(hex($ 1)))/ eg;

+0

这是完全不合适的地方做的编码。如果您编码该字符,则必须对其他字符进行编码,但是您只能对某些字符进行编码! – ikegami

+0

@ikegami请通过提供测试用例来证明您的观点,从而启发我们。 – stackoverflowery

+0

'“\ xE8 \\ u00e8”' – ikegami

相关问题