我有以下內容的一些字符的文件是UTF-8十六進制的字符串字面量在編碼:如何在Perl中對字符串中的 xhh字符進行「解碼」unicode-escape'「?
<root>
<element type=\"1\">\"Hello W\xC3\x96rld\"</element>
</root>
我想讀取文件和解碼UTF-8十六進制編碼字符的文件中它們表示的實際Unicode字符,然後寫入新文件。鑑於上述內容,新的文件應該像下面,當你在使用UTF-8編碼的文本編輯器打開它:
<root>
<element type=\"1\">\"Hello WÖrld\"</element>
</root>
注意雙引號仍然逃脫和UTF-8十六進制編碼\xC3\x96
有現在變成Ö(U + 00D6拉丁文DIALISES字母O)。
我有代碼是部分的工作,如下所述:
#! /usr/bin/perl -w
use strict;
use Encode::Escape;
while (<>)
{
# STDOUT is redirected to a new file.
print decode 'unicode-escape', $_;
}
然而,問題,所有如\"
其他轉義序列被解碼decode 'unicode-escape', $_
爲好。所以,最後,我得到如下:
<root>
<element type="1">"Hello WÖrld"</element>
</root>
我試圖讀取文件中的UTF-8編碼和/或使用Unicode::Escape::unescape
如
open(my $UNICODESFILE, "<:encoding(UTF-8)", shift(@ARGV));
Unicode::Escape::unescape($line);
,但他們都沒有的\xhh
逃逸解碼序列。
基本上所有我想要的是decode 'unicode-escape', $_
的行爲,但它應該只能解碼\xhh
轉義序列並忽略其他轉義序列。
這可能嗎?是否使用decode 'unicode-escape', $_
適合這種情況?任何其他方式?謝謝!
你爲什麼要這麼做?我很欣賞你想要做的事情,但我想知道這是不是X/Y問題,以及是否因爲其他事情而試圖以這種方式做事。 – mfontani 2011-01-19 14:00:38