1

HTML Unicode としてエンコードされ、XML ファイルに埋め込まれた一部の漢字を解析するのに大きな問題があります。

Java MEjavax.xml.parsers.SAXParserを使用しています

そのような文字ファイルの 1 つに词があります。

<test>&#35789;</test>


それに関する情報: http://www.isthisthingon.org/unicode/index.php?page=08&subpage=B&glyph=08BCD

でも妙に后

<test>&#21518;</test>

正常に動作しています。

直接埋め込むこと<test>词&lt;/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)

アイデアをいただければ幸いです。

4

1 に答える 1

2

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

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

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

于 2014-02-16T00:39:01.620 に答える