Unicodes没有在java中翻译

时间:2013-06-27 18:48:36

标签: java unicode

我写了下面的代码片段,我期待输出为AçılışTarih/ Saati:但我得到AçılışTarih/ Saati: 代码如下。

公共类ResourceBundleTest {

public static void main(String[] args) {            
        try{
        String turkey = "A\u00e7\u0131l\u0131\u015f Tarih/Saati:";
        System.out.println(new String(turkey.getBytes("UTF-8")));
        }
        catch(Exception e)
        {
            System.out.println("hello");
        }
    }

}

请帮助我如何摆脱这个问题。

2 个答案:

答案 0 :(得分:4)

这段代码基本上已经破解了:

new String(turkey.getBytes("UTF-8"))

这:

  • 以字符串开头。
  • 将文本编码为UTF-8。
  • 使用平台默认编码对二进制数据进行解码

就像将图像保存为PNG,然后尝试将其加载为JPEG格式。

您可以尝试:

System.out.println(turkey);

...如果没有按照您的意愿显示,问题可能只是您的控制台不支持这些字符。试图改变编码根本没有帮助 - 它可以做的最好的(如果你真的很幸运)是回到原始字符串。更可能(并且看起来你的输出就是这种情况)是平台默认编码不是UTF-8,所以你丢失了数据。

答案 1 :(得分:1)

turkey.getBytes("UTF-8")中,您显式创建一个包含以UTF-8编码的String内容的字节数组。但是,根据其文档,构造函数String(byte[])使用系统的默认编码对此字节序列进行解码。可能不是UTF-8。

为什么不写System.out.println(turkey)?在UTF-8中对String进行编码然后在打印之前对其进行解码有什么意义呢?