我有一个XML文档,它是从人们从各种地方复制/粘贴的一些内容生成的(但大多数是Word文档)。
看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<data> <![CDATA[
(whatever was pasted)
]]></data>
</response>
我一直使用UTF-8
或iso-8859-1
的编码,但现在有人已经离开并复制/粘贴了unicode字符U+001A
({{1}我无法找到接受它的编码。我把XML文件放入的所有内容(例如Firefox,Internet Explorer,XML Spy)都说它无效,无论使用何种编码。
我可以使用哪种编码来阻止文件翻倒,还是我需要逐个开始剥离所有这些字符?
答案 0 :(得分:6)
U + 001A不是XML文档中的有效字符。根据{{3}}的有效字符范围是:
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
答案 1 :(得分:3)
字符U + 001A位于C0控件区域,大部分(包括U + 001A)在XML中被禁止。任何人都故意进入它是不可能的。相反,它是由软件生成的,可能在执行字符代码转换和检测格式错误的数据时(例如,在源编码中没有定义含义的字节)。 U + 001A(SUBSTITUTE)字符适用于此类用途;见我的quick reference to C0 Controls。
如果您无法追踪并修复产生U + 001A的转换(或其他过程),我建议您用U + FFFD REPLACEMENT CHARACTER替换它。它在某种意义上是U + 001A的Unicode等价物。 (后者当然也是Unicode,但在许多情况下都不允许。)但它有一个可见的字形,尽管字形只存在于少数字体中;查看fileformat.info entry on U+FFFD了解详情。
这里的要点是将U + 001A更改为U + FFFD会使数据在XML中可接受,并且仍然保留有关字符级数据错误的信息。
答案 2 :(得分:1)
预处理原始数据,自己编码XML文档不支持的Unicode字符。例如,使用HTML字符编码:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<data> <![CDATA[This is  a test.]]></data>
</response>
在重新读回时,您必须对数据进行后处理,以将HTML编码转换回正确的Unicode字符。