2011-07-20 73 views
1

我在解析一些嵌入XML文件中的HTML Unicode編碼的中文字符時很麻煩。JAXP Sax解析器解析中文字符時的Java-ME Midlet異常

我使用的Java MEjavax.xml.parsers.SAXParser中

一個這樣的字符的文件是詞:

<test>&#35789;</test> 


信息看:http://www.isthisthingon.org/unicode/index.php?page=08&subpage=B&glyph=08BCD

但奇怪後

<test>&#21518;</test> 

工作正常。

直接嵌入<test>詞</test>也有效。

我的測試MIDlet有以下的源代碼:

import java.io.InputStream; 
import javax.microedition.midlet.MIDlet; 
import javax.microedition.midlet.MIDletStateChangeException; 
import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 

import org.xml.sax.helpers.DefaultHandler; 


public class jaxp extends MIDlet { 

public jaxp() { 
} 

protected void destroyApp(boolean unconditional) 
throws MIDletStateChangeException { 
} 

protected void pauseApp() { 
} 

protected void startApp() throws MIDletStateChangeException { 
    try { 
     SAXParserFactory factory = SAXParserFactory.newInstance(); 
     SAXParser saxParser = factory.newSAXParser(); 
     DefaultHandler handler = new DefaultHandler() {}; 
     String fileName = "test.xml"; 
     InputStream is = jaxp.class.getResourceAsStream("/" + fileName); 
     saxParser.parse(is, handler); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
} 

它與死亡:

org.xml.sax.SAXParseException: 
at org.xml.sax.helpers.DefaultHandler.fatalError(+1) 
at com.sun.ukit.jaxp.Parser.panic(+18) 
at com.sun.ukit.jaxp.Parser.ent(+586) 
at com.sun.ukit.jaxp.Parser.elm(+434) 
at com.sun.ukit.jaxp.Parser.parse(+199) 
at com.sun.ukit.jaxp.Parser.parse(+47) 
at com.sun.ukit.jaxp.Parser.parse(+31) 
at jaxp.startApp(+83) 
at javax.microedition.midlet.MIDletProxy.startApp(+7) 
at com.nokia.mid.impl.isa.ui.MIDletManager.callStartApp(+4) 
at com.nokia.mid.impl.isa.ui.MIDletManager.activateMIDlet(+10) 
at com.nokia.mid.impl.isa.ui.MIDletManager.run(+15) 

我會很感激的任何想法。

+0

我不是一個ME程序員,但是在普通的Java中,SAXParseException給出了一些關於原因的信息,這在這裏可能很有用。 –

回答

2

我明顯遲到了這個答案。儘管如此,備案...

我寫了這個解析器好幾年前。在來自JSR172的解析器的方法ent版本中,使用Short.parseShort將實體值轉換爲char。如果值超出32767 Short.parseShort拋出NumberFormatException。這個異常在方法中被捕獲並導致方法恐慌。

在JSR280中使用了更新版本的解析器。該版本應該能夠正確處理32767以上的值。