我發現了一個有趣的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