将Java文件保存为UTF-8

3
当我运行这个程序时,Unicode代码点\u0508会显示为问号'?'。这是因为默认的Windows字符编码CP-1252无法映射该代码点。
但是,当我在Eclipse中将此文件保存为'Text file encoding' = UTF-8并运行此程序时,它会给出正确的输出AԈC
为什么会这样呢?我的意思是,Java文件保存为UTF-8,但底层的Windows操作系统编码仍然是CP-1252。我的问题类似于,当我尝试读取一个以UTF-8编写的文本文件时,它的编码格式为UTF-16,输出结果出现了不同的方框符号。
public class e {
public static void main(String[] args) {
    System.out.println(System.getProperty("file.encoding"));
    String original = new String("A" + "\u0508" + "C");
    try {
        System.out.println("original = " + original);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

你如何运行这个应用程序?在Eclipse控制台中,还是通过Windows终端(CMD),或者甚至其他方式? - Martijn Courteaux
2个回答

3
将Java源文件保存为UTF-8或Windows-1252格式不会有任何区别,因为这两种编码方式都以相同的方式编码所有ASCII代码点。而且你的源文件只使用ASCII字符。
因此,你应该尝试在其他地方找到错误。我建议你仔细重做你所做的步骤,并重新进行测试。

2
问题在于程序运行时的file.encoding设置以及System.out的目标。如果System.out是eclipse控制台,则可能已设置为UTF-8 eclipse控制台。如果只是Windows DOS命令提示符,则它是CP1252代码页,并且在这种情况下只会显示问号。

你是对的...当我尝试从命令提示符运行这个程序时,它给了我同样的“?”符号...感谢您澄清我的问题。 - user547453
如果我想将这个字符保存到文件中,该怎么做呢?我尝试使用 System.out.println("roundTrip = " + new String(original.getBytes("UTF8"),"UTF8"));,但仍然会输出 '?'。 - user547453

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接