首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAXP Sax解析器Java-ME Midlet异常解析汉字

JAXP Sax解析器Java-ME Midlet异常解析汉字
EN

Stack Overflow用户
提问于 2011-07-20 08:52:00
回答 1查看 662关注 0票数 1

我在解析嵌入XML文件的HTML编码的一些汉字时遇到了很大的困难。

我使用Java 和javax.xml.parsers.SAXParser

其中一个字符文件是词:

代码语言:javascript
复制
<test>&#35789;</test>

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

但奇怪的是后

代码语言:javascript
复制
<test>&#21518;</test>

效果很好。

直接嵌入<test>词</test>也能工作。

我的测试中间版有以下源代码:

代码语言:javascript
复制
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();
    }

}
}

它要死了:

代码语言:javascript
复制
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)

如果有任何想法我会很感激。

EN

回答 1

Stack Overflow用户

发布于 2014-02-16 00:39:01

很明显,这个答案我迟到了。不过,为了记录在案..。

几年前我写了这个解析器。在方法中,来自JSR172的解析器的ent版本使用Short.parseShort将实体值转换为char。如果值超过32767,Short.parseShort抛出NumberFormatException。此异常在方法ent中被捕获,并导致方法调用恐慌。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6759301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档