我解決了檢索和顯示非UTF-8字符時遇到的問題,但我不明白爲什麼我的解決方案有效。包含非UTF-8字符的源HTTP GET
以下代碼:
final HttpClient client = new HttpClient();
final HttpMethod method = new GetMethod(urlString);
client.executeMethod(method);
final String responseBodyAsString = method.getResponseBodyAsString();
System.out.println(responseBodyAsString);
被搞亂了所述顯示器上的一些字符,例如YáñEZ
我改變:
final String responseBodyAsString = method.getResponseBodyAsString();
到
final ByteBuffer inputBuffer = ByteBuffer.wrap(method.getResponseBody());
final String responseBodyAsString = new String(inputBuffer.array());
和與之前相同的字符串正確表示爲亞涅斯
爲什麼?
要求服務器發送UTF-8數據的正確方法是使用「Accept-Charset:utf-8」請求標頭,而不是「Content-Type」請求標頭。 –
最重要的是,正確的方法是不改變字符。許多人的事情「哦,這只是一個帶有扭曲的n」,但事實上這是一封不同的信。如果某些軟件將Q改爲O,那麼你會怎麼看?「好吧,它只是帶着一個扭曲的O」 –
@RemyLebeau看到我的更新,它解決了問題。我不必指定字符集或內容類型。那是因爲httpclient有一些知道要使用什麼字符的機制? – Lolo