1

我在解析一些嵌入在 XML 文件中的编码为 HTML Unicode 的中文字符时遇到了很大的麻烦。

我将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>词&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 将实体值转换为字符。如果该值超过 32767 Short.parseShort 抛出 NumberFormatException。此异常在方法 ent 中被捕获并导致方法恐慌的调用。

JSR280 中使用了解析器的更新版本。此版本应该能够正确处理 32767 以上的值。

于 2014-02-16T00:39:01.620 回答