2010-11-05 41 views
0

嗨 我有一个场景,我需要转换默认字符集应该被重写为UTF-8。我正在下课。但是我没有得到预期的产出。因为我使用的是具有默认UTF-8字符集的unix系统,所以我比较了那里的结果。我在这个计划的某个地方错了吗?字符集转换Java

public class CharsetDisplay { 

public static void main(String[] args) { 
    System.out.println(Charset.defaultCharset().name()); 
    System.out.println(Charset.isSupported("UTF-8")); 
    final Charset UTF8_CHARSET = Charset.forName("UTF-8"); 
    try { 
    byte[] byteArray = new byte[] {34,34,0}; 
    String str = new String(byteArray,UTF8_CHARSET); 
    System.out.println("String*** "+str); 
    System.out.println("String to Hex *** "+stringToHex(str)); 
    } catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
} 

} 

打印输出

windows-1252 
true 
String*** "" 

注“”后的字符串输出我有一个SPL字符,这是我没有在UNIX ENV得到

+0

哎呀对不起的代码片段丢失以上格式..只是#1删除所有新行:( – javanerd 2010-11-05 12:01:21

+2

你想要做什么?UTF-8中的字节'34 34 00'意味着'双引号双引号null',这就是你得到的。 – 2010-11-05 12:09:33

+0

因为我看到输出在eclipse中,我在双引号后得到了一个特殊字符,现在我尝试了通过命令提示符在dos中并且它工作正常,谢谢 – javanerd 2010-11-05 13:01:40

回答

2

你有什么期望在这个环境中呈现的零字节?你的输出对我来说完全正确。

不要忘记,您在环境之间遇到的任何差异可能不是Java。如果你从一个控制台调用你的Java程序(我希望你是),那么控制台就可以将程序的输出转换为你在屏幕上看到的内容。因此,根据字符集控制台正在使用的情况,Java完全可以输出您期望的字符,但控制台无法正确呈现它们。

+0

感谢您的回复,我使用eclipse并看到一个特殊字符,同一个程序运行在命令提示符下不给出特殊字符。所以我可以安全地假设输出是基于控制台的字符集。万分感谢 :) – javanerd 2010-11-05 12:59:35

2

如果Java不正确地拿起您的语言环境的编码,你可能要明确告诉它,在命令行:

java -Dfile.encoding=utf-8 CharsetDisplay