嗨,这是一个简单的问题,虽然不知道自己的答案...... 在法语操作系统上运行的以下代码的输出是
public class FrenchTest {
public static void main(String[] args){
String[] lines = {"Le résultat est", "Nom de l'hôte"};
for(String line : lines){
System.out.println("NOW : " + line);
}
}
//////////////
c:\share>java FrenchTest
NOW : Le résultat est
NOW : Nom de l'hôte
c:\share>CHCP 65001
c:\share>java FrenchTest
NOW : Le résultat est
NOW : Nom de l'hôte
为什么?对于这种情况,编码要点在哪里,它在英文版操作系统上工作正常,谢谢!
答案 0 :(得分:1)
如果您更改代码页然后告诉java以UTF-8输出,它应该可以工作。请注意,您需要选择unicode(truetype)字体 - 我的机器上安装了Consolas和Lucida Console。
请注意以下内容,我使用java 1.6.0_23在我的机器上重复了最后一个字符。无法解释这一点:(
msandiford@foo /cygdrive/c/foo
$ javac FrenchTest.java
msandiford@foo /cygdrive/c/foo
$ java -Dfile.encoding=UTF-8 FrenchTest
NOW : Le résultat estt
NOW : Nom de l'hôtee
msandiford@foo /cygdrive/c/foo
$ java -version
java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing)
答案 1 :(得分:1)
这里有两个潜在的问题:
您可以使用Unicode转义来回避编译问题:
System.out
"Le r\u00E9sultat est"
默认情况下,Windows上的数字2始终是错误的。为了与旧的DOS程序兼容,cmd.exe默认使用OEM系统编码。这不是Windows系统中仍然停留在Unicode前编码中的部分所使用的默认“ANSI”编码。
您可以通过switching the console encoding将其修复为windows-1252:
"Nom de l'h\u00F4te"
...或通过将用于发出数据的编码更改为控制台编码。最简单的方法是使用Console。与>chcp 1252
不同,System.out
检测并使用控制台编码。使用System.console()
会导致在IDE中运行代码时出现问题,但有things you can do about that。
我已经unable to get UTF-8 to work获得了65001。
简而言之,您需要克服为保持向后兼容性而做出的决定。
答案 2 :(得分:0)
它适用于我的机器:
Java使用操作系统设置作为默认值,但您应该更改这两个。
答案 3 :(得分:0)