Charset转换Java

嗨,我有一个场景,我需要转换默认的Charset应该被覆盖bu UTF-8。 我在下课时使用。 但我没有得到预期的输出。 因为我使用默认UTF-8作为字符集的unix系统,我在那里比较结果。 我在这个节目的某个地方错了吗?

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 char,我没有在unix环境中获得

期望在此环境中呈现零字节? 您的输出看起来完全正确。

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

如果Java没有正确地获取您的语言环境的编码,您可能必须在命令行中明确地告诉它:

 java -Dfile.encoding=utf-8 CharsetDisplay