2011-07-20 14 views
1

XML Unicodeとしてエンコードされた中国語の一部を解析するのに、XMLファイルに埋め込まれた の問題があります。 JAXP Sax Parser Java-ME Midlet中国語の解析での例外

私はのJava MEを使用してい javax.xml.parsers.SAXParser

一つのそのような文字のファイルは词です:それについて

<test>&#35789;</test> 


情報:http://www.isthisthingon.org/unicode/index.php?page=08&subpage=B&glyph=08BCD

しかし、間違いなく後で

<test>&#21518;</test> 

は問題なく動作しています。

<test>词</test>を直接埋め込むこともできます。それはで死んだ

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) 

私は任意のアイデアをいただければと思います

私のテストMIDletは以下のソースコードを持っています。

+0

私はMEのプログラマーではありませんが、通常のJavaではSAXParseExceptionが原因に関するいくつかの情報を示しています。 –

答えて

2

私は明らかにこの回答で遅れています。それにもかかわらず、記録のために...

私はこのパーサーを良い数年前に書きました。 JSR172のパーサーのメソッド・バージョンでは、Short.parseShortを使用してエンティティ値をcharに変換しました。値が32767を超えると、Short.parseShortはNumberFormatExceptionをスローします。この例外はメソッドentで捕捉され、メソッドパニックの呼び出しにつながります。

JSR280では、より新しいバージョンのパーサーが使用されていました。このバージョンでは、32767を超える値を正しく処理できるはずです。