【问题标题】:Garbage when loading xml content with URLConnection使用 URLConnection 加载 xml 内容时出现垃圾
【发布时间】:2016-08-21 12:18:54
【问题描述】:

我正在尝试使用URLConnection 加载XML 页面的内容,但我得到了垃圾字符。相同的代码几乎适用于任何其他网站,所以我不确定是什么问题。

下面是相关代码:

String url = "http://myUrl";
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
conn.setConnectTimeout(60*2000); // wait only 60 seconds for a response
conn.setReadTimeout(60*2000);
InputStreamReader isr = new InputStreamReader(conn.getInputStream(), encoding);
BufferedReader in = new BufferedReader(isr);
String inputLine;
while ((inputLine = in.readLine()) != null) {
    wholeDocument += inputLine;     
}       

打印出wholeDocument 会产生一堆这样的字符:er���;�pI.���$6

我正在使用encoding = 'UTF-8'

我也尝试过使用XML 库,例如:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new URL(baseUrl).openStream());
System.out.println("doc = " + doc);

但结果是一样的。在终端应用程序中使用curl 时(我使用的是mac)结果是相似的,尽管字符看起来像这样:???0??KZV??????0N6?aH:$?X9v???$>???`

知道如何解决这个问题吗?

【问题讨论】:

    标签: java xml web-crawler


    【解决方案1】:

    如果您检查响应的标题,您会看到 Content-Encoding: gzip 表明响应的主体已被压缩,您需要先解压缩它,这就是为什么您会得到那些奇怪的人物。有关Http Compression 的更多详细信息。

    检查带有curl 的标头的一个好方法是使用详细选项-v,在这种情况下感谢curl -v http://sites.one.co.il/XML/VOD/ | more,我可以快速看到响应标头。

    【讨论】:

      【解决方案2】:

      扩展另一个答案,您可以检查接收到的文件是否是 gzip 编码的,如果是,则通过以下方式对其进行解码:

       if (conn.getHeaderField("Content-Encoding") != null && 
              conn.getHeaderField("Content-Encoding").equals("gzip")){
          InputStream gzStream = new GZIPInputStream(conn.getInputStream());
          InputStreamReader isr = new InputStreamReader(gzStream, encoding);
      } else {
          InputStreamReader isr = new InputStreamReader(conn.getInputStream(), encoding);
      }
      

      或者,您可以通过以下方式指定您不喜欢 gzip 编码的数据:

      conn.setRequestProperty("Accept-Encoding", "identity"); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-16
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多