html - 在 Perl 中读写未知编码的 XML 文件?

标签 html xml perl utf-8 latin1

我正在挑选别人的大型项目的一部分,并试图纠正错误。问题是,我只是不确定正确的方法是什么。

所以,我正在 cURL 一堆 HTML 页面,然后使用简单的命令将其写入文件,例如:

$src = `curl http://google.com`;
open FILE, ">output.html";
print FILE $src;
close FILE;

现在我希望将它们保存为 UTF-8。它保存为什么?然后我使用相同的基本“打开”命令读取 html 文件,使用正则表达式调用解析 html,并使用字符串连接生成一个大字符串并将其写入 XML 文件(使用与上面相同的代码)。我已经开始改用 XML::Writer,但现在我必须检查并修复编码不正确的文件。

因此,我不再拥有 html,但我仍然拥有必须显示正确字符的 XML。这是一个例子:http://filevo.com/wkkixmebxlmh.html

主要问题是检测问题字符并将其替换为在编辑器中正确显示的“\x{2019}”。但我想不出一个正则表达式来实际捕捉野外的角色。

更新:

我仍然无法检测到我上传到上面 Filevo 的 XML 文件中的 ALT-0146 字符。我试过以 UTF-8 格式打开它,并搜索/\x{2019}/、/chr(0x2019)/和/'/,什么也没有。

最佳答案

发现 HTML 文档的编码困难。参见 http://blog.whatwg.org/the-road-to-html-5-character-encoding特别是它需要一个“7 步算法;第 4 步有 2 个子步骤,第一个有 7 个分支,其中一个有 8 个子步骤,其中一个实际上链接到一个单独的算法,该算法本身有 7 个步骤……就这样持续了一段时间。”

这是我用于解析 HTML 文件的有限需求。

my $CHARACTER_SET_CLASS = '\w:.()-';

     # X(HT)?ML: http://www.w3.org/International/O-charset
     /\<\?xml [^>]*(?<= )encoding=[\'\"]?([$CHARACTER_SET_CLASS]+)/ ||
     # X?HTML: http://blog.whatwg.org/the-road-to-html-5-character-encoding
     /\<meta [^>]*\bcharset=["']?([$CHARACTER_SET_CLASS]+)/i ||
     # CSS: http://www.w3.org/International/questions/qa-css-charset
     /\@charset "([^\"]*)"/ ||

关于html - 在 Perl 中读写未知编码的 XML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6157262/

相关文章:

python - 即使在使用 strip_cdata=False 后 CDATA 在 lxml 中被剥离

xml - WiX 安装程序无法解析条件

java - 如何将java id转换为ASCII字符字符串中的数字形式?

perl - 从子例程中的文件句柄引用中读取

regex - 无法理解多行正则表达式 qr/( . $ .+ )/xms 的结果

jquery - 是否可以设置最小视口(viewport)高度?

html - 你能在 IE 中的表格行上放置渐变吗?

html - 表格中的图像总是高于文本

html - 容器的最小高度和最大高度以及 child 的相对高度

Perl 下拉菜单和 Unicode