首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sax - ExpatParser$ParseException

Sax - ExpatParser$ParseException
EN

Stack Overflow用户
提问于 2012-01-11 21:36:06
回答 1查看 6.4K关注 0票数 5

我正在制作一个用于读取XML Internet的Android应用程序。此应用程序使用SAX解析XML。这是我解析部分的代码:

代码语言:javascript
复制
public LectorSAX(String url){
    try{
        SAXParserFactory spf=SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        DefaultHandler lxmlr=new LibraryXMLReader() ;
        sp.parse(url, lxmlr);

        nodo=((LibraryXMLReader)lxmlr).getNodoActual();

    }catch(ParserConfigurationException e){ 
        System.err.println("Error de parseo en LectorSAX.java: "+e);
    }catch(SAXException e){
        System.err.println("Error de sax LectorSAX.java: " + e);
    } catch (IOException e){
        System.err.println("Error de  io LectorSAX.java: " + e);
    }
}

问题是发生了SAXException。异常消息如下:

org.apache.harmony.xml.ExpatParser$ParseException:第4行第42列:格式不正确(无效令牌)

但是,如果我将相同的代码放入正常的Java应用程序中,则不会出现此异常,并且一切正常。

为什么相同的代码在Java应用程序中工作得很好,而不是Android呢?另一方面,如何解决这个问题呢?

谢谢你的帮助。

欢迎光临。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-17 11:45:32

这可能是一个字符编码问题。

如您所见,无效的令牌错误指向第4行。

在这一条线上,你可以找到一个尖锐的(Meteorología)和一个倾斜的(Espa)。XML报头显示一个ISO-8859-15编码值。由于它不像UTFs或ISO-8859-1编码那样常见,所以当SAXParser连接并试图使用系统默认字符集将字节内容转换为字符时,可能会导致错误。

然后,您需要告诉SAXParser要使用哪个字符集。这样做的一种方法是向解析方法传递一个InputSource,而不是URL。例如:

代码语言:javascript
复制
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();

InputSource is = new InputSource(url);
is.setEncoding("ISO-8859-15");

DefaultHandler lxmlr=new LibraryXMLReader() ;
sp.parse(is, lxmlr);

编辑:,似乎Android不支持这种编码,引发了org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: unknown encoding异常。

由于ISO-8859-15主要兼容ISO-8859-1,除了一些特定字符(如您可以看到的这里)外,解决方法是在setEncoding方法中将ISO-8859-15值更改为ISO-8859-1,从而迫使解析器使用不同但兼容的字符集编码:

代码语言:javascript
复制
is.setEncoding("ISO-8859-1");

看起来,由于Android不支持声明的字符集,它使用它的默认(UTF-8),因此解析器不能使用XML声明来选择apropiate编码。

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

https://stackoverflow.com/questions/8827006

复制
相关文章

相似问题

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