使用dtdparser解析中文dtd
Posted on 2005-08-22 21:02 ravenix 閱讀(1357) 評(píng)論(1) 編輯 收藏 所屬分類(lèi): XML-XSL-FO盡管有一些不足,wutka dtdparser 仍然是使用最廣泛的java dtd dom解析器。
其它可用的java dtd parser有 Ronald Bourret DTD Parser 和 Matra DTD parser
要在DTD中使用中文,必須要在dtd文件的第一行寫(xiě)上
<?xml version="1.0" encoding="UTF-8"?> |
并且將dtd文件以u(píng)tf-8格式保存。別的編碼格式也可以試試,但我不想冒險(xiǎn)。
dtdparser不使用這個(gè)encoding指示來(lái)解析DTD,我們只能自己想辦法,修改它的代碼。
dtdparser有這些構(gòu)造器(省略了帶trace的)
DTDParser(java.io.File in)
DTDParser(java.io.Reader in)
DTDParser(java.net.URL in)
其中以Reader為參數(shù)的沒(méi)有編碼問(wèn)題,因?yàn)閞eader本身已經(jīng)指定了字符集。
以File為參數(shù)的構(gòu)造器內(nèi)部使用了new FileReader(in),這個(gè)方式使用系統(tǒng)默認(rèn)字符集,不要用它,可以用FileInputStream和InputStreamReader來(lái)指定字符集,傳遞給以Reader為參數(shù)的構(gòu)造器。
以URL為參數(shù)的構(gòu)造器內(nèi)部使用了new InputStreamReader(in.openStream()),沒(méi)有指定字符集,我們可以給它增加一個(gè)帶有String charsetName參數(shù)的構(gòu)造器,內(nèi)部調(diào)用new InputStreamReader(in.openStream(), charsetName)