我正在向网络服务发送请求,我收到的回复可能是任何语言:英语,法语,阿拉伯语,日语等。
但是,我遇到了正确显示不同语言的问题。例如,我收到了:
translation: ä½ å¥½
而不是:
translation: 你好
我猜我在HTTP请求/响应中没有正确编码。有人能告诉我我可能做错了什么吗?这是我收到HTTP响应的代码:
baos = new ByteArrayOutputStream();
InputStream responseData = connection.openInputStream();
byte[] buffer = new byte[20000];
int bytesRead = 0;
while ((bytesRead = responseData.read(buffer)) > 0) {
baos.write(buffer, 0, bytesRead);
}
System.out.println(new String(baos.toByteArray()));
谢谢!
答案 0 :(得分:1)
最后打印时,请尝试
System.out.println(new String(baos.toByteArray(), Charset.forName("UTF-8")));
答案 1 :(得分:1)
new String(baos.toByteArray());
将使用您平台的默认字符集解释byte []。来自the documentation:
使用平台的默认字符集解码指定的字节数组,构造一个新的String。
这些字节需要由解码器解释,该解码器与服务器发送给您的字符集兼容。通常,这是在HTTP Content-type
标头中指定的。
答案 2 :(得分:1)
我认为您应该使用toString(String charsetName)
的方法ByteArrayOutputStream
。
这样的事情:
System.out.println(baos.toString("UTF-8"));
当然,您必须在服务器和客户端上使用相同编码。
我希望它有所帮助。
答案 3 :(得分:0)
我认为你需要使用InputStreamReader和OutputStreamWriter。这些类允许您指定编码。 例如:
Writer out = new BufferedWriter(new OutputStreamWriter(System.out, "UTF-8"));
out.write(something);
答案 4 :(得分:-1)
在
System.out.println(new String(baos.toByteArray()))
您需要向new String(byte bytes[], Charset charset)
提供正确的字符集。
您需要知道要使用哪个Charset(即应该与响应一起发送)。 默认值为UTF-8,但不包括中文,日文,阿拉伯文,希伯来文等。