从Java中的URL解析XML时出现格式错误的DbyteSequenceException

从Java中的URL解析XML时出现格式错误的DbyteSequenceException,java,xml,xml-parsing,Java,Xml,Xml Parsing,我试图用以下代码解析XML: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new URL("http://www.cinemark.com.br/mobile/xml/films/").openStream()); 但会出现以下错误: com.sun.org.apa

我试图用以下代码解析XML:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new URL("http://www.cinemark.com.br/mobile/xml/films/").openStream());
但会出现以下错误:

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:687)
    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:557)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1753)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity(XMLEntityScanner.java:1629)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(XMLEntityScanner.java:1667)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:196)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:812)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
    at Programacao.main(Programacao.java:53)
访问时,您可以看到一些葡萄牙语字符,看到响应,我可以看到xml文件的第一行:

<?xml version="1.0" encoding="iso-8859-1"?>
但我还是犯了同样的错误。 如何使用不同的编码解析xml

另外,我如何知道xml是否真的在文件中描述的编码中

我在FedoraLinux20上使用JDK1.7.051

谢谢

解决方案

我是如何解决这个问题的,基于一系列精妙的回答:

URL url = new URL("http://www.cinemark.com.br/mobile/xml/films/");

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();

InputStream ism = url.openStream();
GZIPInputStream gis = new GZIPInputStream(ism);
Reader decoder = new InputStreamReader(gis);
InputSource is = new InputSource(decoder);

Document doc = db.parse(is);

行为上的差异如下:

在浏览器中访问URL时,经过一段时间后会显示:

<?xml version="1.0" encoding="iso-8859-1"?>
<cinemark>
  <films>
    <film ...>...</film>
    ...
  </films>
</cinemark>
那么,到底发生了什么?简单:这叫做。因此,在运行以下命令时

curl-o films.zip

您将得到一个名为
films.zip
的文件,其中包含一个名为
films
的文件,该文件又包含预期的XML文档


因此,您应该做的是:将输出流作为压缩流,提取内容,并对其进行解析。

我想,设置编码与GetByTestStream无关。最后一个只返回字节。编码是关于如何解释这些字节的元信息,但是使用getBytes根本没有这种解释。直接解析输入源,而不是像@kirilloid提到的那样获取字节流。may b编码格式错误…首先检查格式谢谢回答,但是如果我直接传递输入源,我会得到:org.xml.sax.SAXParseException;prolog中不允许包含内容。我还得照@Seelenvirtuose说的做。你说得对,它是用gunzip格式压缩的。非常感谢你。
<?xml version="1.0" encoding="iso-8859-1"?>
<cinemark>
  <films>
    <film ...>...</film>
    ...
  </films>
</cinemark>
‹      ¬YMsÛ6½ûW`xôT¨Oªc) [...]