2012-11-01 29 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

相關問題