【发布时间】:2013-06-27 17:22:42
【问题描述】:
我解决了我在检索和显示非 UTF-8 字符时遇到的问题,但我不明白为什么我的解决方案有效。
以下代码:
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());
和以前相同的字符串正确地表示为 Yáñez
这是为什么呢?
【问题讨论】:
-
请求服务器发送UTF-8数据的正确方法是使用
Accept-Charset: utf-8请求头,而不是Content-Type请求头。 -
最重要的是,正确的方法是不要更改字符。许多人认为“哦,这只是一个带有波浪线的 n”,但实际上它是一个不同的字母。如果某些软件将 Q 更改为 O,您会怎么想“嗯,它只是带有波浪线的 O”
-
@RemyLebeau 查看我的更新,它解决了这个问题。我不必指定字符集或内容类型。这是因为 httpclient 有一些机制可以知道使用什么字符?
-
@MihaiNita 要点:添加字符有充分的理由,删除它们并不理想。如果我们坚持使用 UTF-8,我无法对西班牙语发表评论,但在法语中,将 ç、é 等字母更改为 c 和 e 是一个错误,但仍然是可用的最佳方法。因此,如果有人没有 Q,那么是的,O 可以合理地回答您的问题。话虽如此,在当前示例中,我能够解决我的问题并正确显示字符。
标签: java utf-8 character-encoding get