0

尝试从 MS Web 服务读取生成的 XML

URL page = new URL(address);
StringBuffer text = new StringBuffer();
HttpURLConnection conn = (HttpURLConnection) page.openConnection();
conn.connect();
InputStreamReader in = new InputStreamReader((InputStream) conn.getContent());
BufferedReader buff = new BufferedReader(in);
box.setText("Getting data ...");
String line;
do {
  line = buff.readLine();
  text.append(line + "\n");
} while (line != null);
box.setText(text.toString());

或者

URL u = new URL(address);
URLConnection uc = u.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {

    inputLine = java.net.URLDecoder.decode(inputLine, "UTF-8");
  System.out.println(inputLine);
}
in.close();

任何页面都可以正常读取,除了 Web 服务输出它奇怪地读取大于和小于符号

它将 < 读作“& lt;” 和 > 到“>” 没有空格,但如果我在这里输入它们没有空格 stackoverflow 使它们 < 和 >

请帮忙谢谢

4

2 回答 2

1

首先,这一行似乎有些混乱:

inputLine = java.net.URLDecoder.decode(inputLine, "UTF-8");

这实际上表明您希望服务器提供的文档中的每一行都经过 URL 编码。URL 编码与文档编码不同。

http://en.wikipedia.org/wiki/Percent-encoding

http://en.wikipedia.org/wiki/Character_encoding

查看您的代码片段,我认为 URL 编码(百分比编码)不是您所追求的。

文档字符编码方面。您正在这一行进行转换:

InputStreamReader in = new InputStreamReader((InputStream) conn.getContent());

conn.getContent()返回InputStream对字节进行操作的 an,而阅读器对字符进行操作 - 字符编码转换在此处完成。检查其他InputStreamReader将编码作为第二个参数的构造函数。如果没有第二个参数,您将退回到 java 中您的平台默认值。

InputStreamReader(InputStream in, String charsetName)

例如,让您将代码更改为:

InputStreamReader in = new InputStreamReader((InputStream) conn.getContent(), "utf-8");

但真正的问题是“您的服务器提供内容的编码是什么?” 如果您也拥有服务器代码,则可以将其硬编码为合理的内容,例如utf-8. 但如果它可以变化,您需要查看 http 标头来Content-Type弄清楚。

String contentType = conn.getHeaderField("Content-Type");

的内容contentType看起来像

text/plain; charset=utf-8

获取此字段的简便方法是:

String contentEncoding = conn.getContentEncoding();

请注意,完全有可能没有提供字符集或没有Content-Type标题,在这种情况下,您必须使用合理的默认值。

于 2011-10-23T10:03:27.920 回答
0

Mark Rotteveel 是正确的,网络服务是罪魁祸首,由于某种原因,它使用 & lt 和 & gt 格式发送大于和小于符号

谢谢Martin Algesten,但我已经说过我正在解决它我只是在寻找为什么会这样。

于 2011-10-30T07:57:53.680 回答