【问题标题】:Discard unprintable characters returned in server's XML response丢弃服务器 XML 响应中返回的不可打印字符
【发布时间】:2011-01-09 08:14:40
【问题描述】:

在尝试使用 Bing API 进行搜索时,我得到了不可打印的字符,并且似乎没有任何额外信息。目标是将 XML (UTF-8) 响应保存为文本文件以供稍后解析。

我的代码目前看起来像这样:

    URL url = new URL(queryURL);

    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    BufferedWriter out = new BufferedWriter(new FileWriter(query+"-"+saveResultAs));
    String str = in.readLine();
    out.write(str);

    in.close();
    out.close();

当我将“str”的内容发送到控制台时,它看起来像这样:

这是新创建的本地 XML 文件的样子:

我应该怎么做才能转换 UTF-8 文本以使 str 没有多余的字符?

【问题讨论】:

  • 这是一个转码错误;使用 XML 解析器或在解码为字符串之前检测编码:w3.org/TR/REC-xml/#sec-guessing 我假设您需要一个字符串 - 如果您只想在本地保存文件,读取和写入字节。
  • @McDowell 我最终直接将字节读取和写入文件。使用 String 是自我强加的限制。谢谢!

标签: java xml utf-8 bing-api


【解决方案1】:

如果你事先知道编码,你应该

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

编写器也是如此...在您的示例中,您的文件在编写后以平台默认编码,同时仍声明为 UTF-8。

从 XML 声明中读取编码以避免意外可能是明智之举。

如果您只想存储数据以供以后使用,那么无论如何编码/解码都没有用。只需读取字节并将它们写掉。继续为 XML 解析器检测编码的任务..

【讨论】:

  • 为 InputStreamReader 提供“UTF-8”帮助我走上了正确的道路。谢谢!
【解决方案2】:

XML 解析器将处理编码/解码,并将适当的字符反馈给您(例如,SAX 解析器将通过 characters() 方法回调来完成此操作)。然后,您需要做的就是将其存储在合适的文件中(也许使用合适的Byte-Order-Mark?)

【讨论】:

  • 我会记住这个建议,但目前我的任务只是在本地保存文件。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多