在带有Java 1.5的Mac OS X 10.5上,我有这段代码片段。如何使西里尔字符显示正确的字符串?
public static void main(String[] args) {
String name = "Алексей";
System.out.println("name = " + name);
}
输出是:
name = ???????
我期望看到:
name = Алексей
我怎样才能做到这一点?
在带有Java 1.5的Mac OS X 10.5上,我有这段代码片段。如何使西里尔字符显示正确的字符串?
public static void main(String[] args) {
String name = "Алексей";
System.out.println("name = " + name);
}
输出是:
name = ???????
我期望看到:
name = Алексей
我怎样才能做到这一点?
感谢所有有用的想法。
原来的关键,我的问题是这样的句子:
在的Mac OS X 10.5与Java 1.5,我有这样的代码片段
的IDE我使用,IntelliJ IDEA明确地将文件编码设置为MacRoman。通过将项目的编码更改为UTF-8,问题即可解决,无需更改任何代码。
这里有两个潜在的问题。首先,你的源代码中有西里尔字符。这意味着您必须确保您用来存储文件的编码与编译器使用的编码相同。查看javac联机帮助页,查看其默认编码是什么,和/或如何指定特定的编码。或者,在你的字符串中使用Unicode转义符。
第二种可能性是您的终端字体不显示西里尔文字符。但是,我不认为这是发生了什么,因为(1)您能够看到源代码中的字符,并且(2)我认为丢失的字形呈现为块,不正确的编码呈现为问号。
要测试,只需用正确的Unicode转义替换字符串,并验证屏幕上的字符呈现。
如果使用控制台类,而不是System.out的,而你是真的真的很幸运,你MIGHT能够得到控制台打印西里尔字母。
但是一般来说,控制台没有很好的字符集支持。
以某种其他方式输出字符串要可靠得多。将其打印到Swing组件。
如果您的字符串是从某处动态获取的,并且您需要确保它是根据需要进行编码的,请使用一些String类构造函数,将Charset类型作为参数来转换该字符串。