盡管有一些不足,wutka dtdparser 仍然是使用最廣泛的java dtd dom解析器。
其它可用的java dtd parser有 Ronald Bourret DTD Parser 和 Matra DTD parser
要在DTD中使用中文,必須要在dtd文件的第一行寫上
<?xml version="1.0" encoding="UTF-8"?> |
并且將dtd文件以utf-8格式保存。別的編碼格式也可以試試,但我不想冒險。
dtdparser不使用這個encoding指示來解析DTD,我們只能自己想辦法,修改它的代碼。
dtdparser有這些構(gòu)造器(省略了帶trace的)
DTDParser(java.io.File in)
DTDParser(java.io.Reader in)
DTDParser(java.net.URL in)
其中以Reader為參數(shù)的沒有編碼問題,因為reader本身已經(jīng)指定了字符集。
以File為參數(shù)的構(gòu)造器內(nèi)部使用了new FileReader(in),這個方式使用系統(tǒng)默認(rèn)字符集,不要用它,可以用FileInputStream和InputStreamReader來指定字符集,傳遞給以Reader為參數(shù)的構(gòu)造器。
以URL為參數(shù)的構(gòu)造器內(nèi)部使用了new InputStreamReader(in.openStream()),沒有指定字符集,我們可以給它增加一個帶有String charsetName參數(shù)的構(gòu)造器,內(nèi)部調(diào)用new InputStreamReader(in.openStream(), charsetName)