字符集转换Java

字符集转换Java,java,character-encoding,Java,Character Encoding,嗨 我有一个场景,需要将默认字符集转换为UTF-8。我在课下使用。但我没有得到预期的产出。因为我使用的是一个unix系统,它的默认字符集是UTF-8,我在这里比较了结果。我在这个节目的某个地方错了吗 public class CharsetDisplay { public static void main(String[] args) { System.out.println(Charset.defaultCharset().name()); System.out.println(C

嗨 我有一个场景,需要将默认字符集转换为UTF-8。我在课下使用。但我没有得到预期的产出。因为我使用的是一个unix系统,它的默认字符集是UTF-8,我在这里比较了结果。我在这个节目的某个地方错了吗

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环境中我没有这个spl char,您希望零字节在这个环境中呈现什么?您的输出在我看来完全正确

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

在这种环境中,您期望零字节呈现什么?您的输出在我看来完全正确


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

如果Java没有正确选择语言环境的编码,您可能必须在命令行显式告诉它:

java -Dfile.encoding=utf-8 CharsetDisplay

如果Java没有正确地选择区域设置的编码,您可能必须在命令行中明确地告诉它:

java -Dfile.encoding=utf-8 CharsetDisplay

对不起,上面的代码片段中丢失了格式。。Stackoverflow刚刚删除了所有新行:(你到底想做什么?UTF-8中的字节
34 34 00
表示
双引号双引号null
,这就是你得到的。因为我在eclipse中看到了输出,所以我在双引号后得到了一个特殊字符。现在我在dos中尝试通过命令提示符,效果很好。感谢各位,很抱歉在co中丢失了格式。)删除上面的代码段..Stackoverflow刚刚删除了所有新行:(你到底想做什么?UTF-8中的字节
34 34 00
表示
双引号双引号null
,这就是你得到的。因为我在eclipse中看到了输出,所以我在双引号后得到了一个特殊字符。现在我在dos中尝试通过命令提示符,效果很好。感谢你的回复。我正在使用eclips。)并且看到了一个特殊字符。在命令提示符下运行的同一个程序不提供特殊字符。因此我可以安全地假设输出基于控制台的字符集。非常感谢:)感谢您的回复。我在使用eclipse时看到了一个特殊字符。在命令提示符下运行的同一程序不提供特殊字符。因此,我可以放心地假设输出基于控制台的字符集。非常感谢:)