如何在Perl中对字符串中的\ xhh字符进行“解码”unicode-escape'“?
我有以下内容的一些字符的文件是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', $_
适合这种情况?任何其他方式?谢谢!
的\ XNN字符查找组和处理它们,我想:
s{((?:\\x[0-9A-Fa-f]{2})+)}{decode 'unicode-escape', $1}ge
不,那是不对的。 UTF-8不是2字节编码。 – tchrist 2011-01-19 01:57:28
你为什么要这么做?我很欣赏你想要做的事情,但我想知道这是不是X/Y问题,以及是否因为其他事情而试图以这种方式做事。 – mfontani 2011-01-19 14:00:38