我有一个包含以下内容的文件,其中一些字符是 UTF-8 十六进制编码的字符串文字:
<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 拉丁大写字母 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', $_
适合这种情况吗?还有什么办法吗?谢谢!