帮助显示不同语言的java字符

时间:2011-03-15 16:54:46

标签: java http internationalization

我正在向网络服务发送请求,我收到的回复可能是任何语言:英语,法语,阿拉伯语,日语等。

但是,我遇到了正确显示不同语言的问题。例如,我收到了:

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()));

谢谢!

5 个答案:

答案 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,但不包括中文,日文,阿拉伯文,希伯来文等。