[英]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.