[英]Wrong encoding with Java HttpURLConnection
尝试从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;” 和>到“&gt;” 没有空格,但是如果我在这里输入它们而没有空格stackoverflow使它们<和>
请帮忙谢谢
首先,这一行似乎有些混乱:
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
, conn.getContent()
字节进行操作,而阅读器对chars进行操作-字符编码转换在此完成。 检出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
头,在这种情况下,您必须使用合理的默认值。
Mark Rotteveel是正确的,Web服务是罪魁祸首,出于某种原因,它发送带有&lt和&gt格式的大于和小于符号
感谢Martin Algesten,但我已经说过要解决这个问题,我只是在寻找为什么这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.