如何正确显示带有西里尔字符的字符串?

时间:2009-05-30 11:21:12

标签: java macos character-encoding

在使用Java 1.5的Mac OS X 10.5上,我有这段代码片段。

public static void main(String[] args) {
    String name = "Алексей";
    System.out.println("name = " + name);
}

输出结果为:

name = ???????

我希望看到:

name = Алексей

我怎样才能实现这一目标?

4 个答案:

答案 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类型作为参数来转换该字符串。