Java:将UTF 8转换为String

时间:2012-10-02 21:15:56

标签: java utf-8

当我运行以下程序时:

public static void main(String args[]) throws Exception
{
    byte str[] = {(byte)0xEC, (byte)0x96, (byte)0xB4};
    String s = new String(str, "UTF-8");
}
在Linux上

并检查jdb中s的值,我正确得到:

 s = "ì–´"
在Windows上,我错误地得到了:

s = "?"

我的字节序列是韩语中有效的UTF-8字符,为什么它会产生两个非常不同的结果?

4 个答案:

答案 0 :(得分:3)

它正确地在我的计算机(Ubuntu Linux)上打印“”,如Code Table Korean Hangul中所述。已知Windows命令提示符存在编码问题,请不要打扰。

你的代码很好。

答案 1 :(得分:1)

它为我提供了。这意味着您的控制台可能未配置为显示UTF-8,这是打印/显示问题,而不是表示问题。

答案 2 :(得分:1)

您获得了正确的字符串,它的Windows控制台无法正确显示字符串。

这篇文章的link讨论了一种使Java控制台使用JNI生成正确的Unicode输出的方法。

答案 3 :(得分:0)

JDB正在错误地显示数据。代码在Windows和Linux上的工作方式相同。尝试运行这个更明确的测试:

public static void main(String[] args) throws Exception {
    byte str[] = {(byte)0xEC, (byte)0x96, (byte)0xB4};
    String s = new String(str, "UTF-8"); 
    for(int i=0; i<s.length(); i++) {
        System.out.println(BigInteger.valueOf((int)s.charAt(i)).toString(16));
    }
}

这将打印出字符串中每个字符的十六进制值。这将在Windows和Linux中正确打印出“c5b4”。