我写了下面的代码片段,我期待输出为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");
}
}
}
请帮助我如何摆脱这个问题。
答案 0 :(得分:4)
这段代码基本上已经破解了:
new String(turkey.getBytes("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进行编码然后在打印之前对其进行解码有什么意义呢?