我发现了一个有趣的bug并想知道您的想法。简要背景:我写了一个自定义的DTD和一个示例XML文件(都是UTF-8)。我现在已经在Java中实现了一个我想测试的SAX解析器。我得到了一个SAXException抱怨“在公共标识符中找到了一个无效的XML字符(Unicode:0x7e)”。现在,我的DTD的URL确实包含一个波浪字符(unicode 0x7e)。如果我将DTD文件移动到另一个不包含代字号的URL,那么我的示例XML文件将解析而不会导致SAXException。Tilde在XML公共标识符中无法识别
所以我对这个问题的一个变通办法,但我想知道:为什么会发生这种情况?这是一个错误?如果是这样,它是UTF-8,Java(1.6.0_18 x86),Windows(Server 2008 R2 x86_64)还是什么?或者,这是XML 1.0规范中那些晦涩难懂的细节之一?
不是一个*答案*(例如,我不知道是什么问题),但它肯定似乎按照规范要求(http://www.w3.org/TR/xml/#dt-sysid)。如果你逃脱它会发生什么(当你引用它时用%7e替换它)?我真的很惊讶,因为'〜'是URL的一个非常常见的字符,尤其是在大学等历史上。 – 2010-05-14 13:32:00
谢谢你的回复。陌生感继续!如果我用%7e替换〜,它就可以工作。 所以〜被翻译为0x7e,解析器认为这是一个问题。但是明确插入0x7e被解析器接受。奇怪的。 – 2010-05-14 14:08:50