您好 我有一个场景,我需要转换默认的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 env中获取
答案 0 :(得分:2)
您希望期望在此环境中呈现零字节?你的输出对我来说看起来完全正确。
不要忘记,您在环境之间遇到的任何差异可能都不会归结为Java。如果您从控制台调用Java程序(我希望您是这样),则可以通过控制台将程序的输出实际转换为您在屏幕上看到的输出。因此,根据控制台正在使用的字符集,Java完全可以输出您期望的字符,但是控制台无法正确呈现它们。
答案 1 :(得分:2)
如果Java没有正确地获取您的语言环境的编码,您可能必须在命令行中明确地告诉它:
java -Dfile.encoding=utf-8 CharsetDisplay