【发布时间】:2015-06-04 18:49:16
【问题描述】:
我有一组 XML 文件,其中包含非简单 ASCII 字符和编码字符的组合,例如:
... many 8-bit characters such as é, ⪚, and ñ.
(第二个字符是与分号版本的⪚。第一个和第三个是未转义的字符。)
文件为 UTF-8 格式。
当我使用 XML::Twig 运行我的 Perl 脚本时,实体(上面的第二个字符)变成了一个未知字符(我在写入文件时收到“打印中的宽字符”消息)。
这是我的代码。处理程序所做的只是读取 XML,而不是进行任何更改:
my $twig= XML::Twig->new(
comments => 'keep',
output_encoding => 'UTF-8',
# keep_encoding => 1,
twig_handlers => { topicref => \&topicref_processing,
xref => \&topicref_processing,
link => \&topicref_processing},
pretty_print => 'indented',
);
$twig->parsefile($file);
my($outfile) = $file;
$outfile =~ s/([.]dita)/.out$1/i;
open(NEW,">$outfile");
$twig->flush( \*NEW);
close(NEW);
如果我添加 keep_encoding => 1(上面注释掉),实体会被保留,但第一个和第三个字符会损坏:
...such as é, ⪚, and ñ.
如果我在刷新中添加 UTF-8 编码:
open(NEW,'>:encoding(UTF-8)', $outfile);
它变得更加奇怪:
...such as Ã?©, ⪚, and Ã?±.
知道如何毫发无损地通过角色和实体吗? 谢谢你, 斯科特
【问题讨论】:
-
您误解了编码和转义的工作原理。
é是 UnicodeU+00E9,⪚是 UnicodeU+2A9A,ñ是 UnicodeU+00F1。没有像 非简单 ASCII 字符 这样的东西,而且您的任何字符都没有被转义。目前尚不清楚等于或大于是否在您的文件中显示为⪚或⪚;请澄清 -
嗨,是的,对于混淆的术语,我很抱歉,我不熟悉它是如何工作或讨论的。文件中出现的等号或更大的符号是
⪚,也就是和号-xxx-分号的版本。重音-e 和波浪号-n 是文件中的那些确切字符。谢谢。