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