【发布时间】:2015-05-12 01:06:48
【问题描述】:
使用 UTF-8 声明为编码的给定 XML 文件未通过 xmllint。假设非 UTF-8 字符导致错误,以下sed 命令正在针对该文件运行。 sed 's/[^\x00-\x7F]//g' file.xml。命令错误,或者非 UTF-8 字符不是问题,因为在运行 sed 后,xmllint 仍然失败。第一个问题是:sed 正则表达式是否正确?
= = = = =
这是xmllint 的输出:
$ xmllint file.xml
file.xml:35533: parser error : CData section not finished
<p class="imgcont"><img alt="Diets of 2013" src="h
<b>What You Eat: </b>Foods low in sugar and carbs and high in fat—80% of cal
^
file.xml:35533: parser error : PCDATA invalid Char value 31
<b>What You Eat: </b>Foods low in sugar and carbs and high in fat—80% of cal
^
file.xml:35588: parser error : Sequence ']]>' not allowed in content
as.people.com/2013/11/07/kerry-washington-pregnant-diet-green-smoothie-recipe/"]
^
= = = = =
更新:在 TextMate 中,查看文件时,有一个字符显示为 <US>。如果从文件中手动删除该字符,则文件将传递xmllint。
【问题讨论】:
-
字符
<US>是代码点\x1f。 xmllint 说的错误是什么? -
@Phylogenesis:更新问题,输出为
xmllint。 -
@halfbit:谢谢。似乎需要修改
sed正则表达式以去除控制字符? -
sed 作用于字符而不是字节。如果文件的编码错误,您将不知道 sed 会看到什么。您需要一个在二进制级别而不是字符级别工作的工具。
标签: regex xml utf-8 sed xmllint