代码之家  ›  专栏  ›  技术社区  ›  Steve McLeod

如何使西里尔字符字符串正确显示?

  •  1
  • Steve McLeod  · 技术社区  · 15 年前

    在Mac OS X 10.5和Java 1.5上,我有这个代码片段。

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

    输出是:

    name = ???????
    

    我希望看到:

    name = Алексей
    

    我怎样才能做到这一点?

    4 回复  |  直到 15 年前
        1
  •  5
  •   kdgregory    15 年前

    这里有两个潜在的问题。首先,您的源代码中有西里尔字符。这意味着您必须确保用于存储文件的编码与编译器使用的编码相同。退房 贾瓦克 查看其默认编码是什么和/或如何指定特定编码的手册页。或者,在字符串中使用Unicode转义。

    第二种可能是终端字体不显示西里尔字符。但是,我不认为这是正在发生的事情,因为(1)您能够看到源代码中的字符,(2)我相信缺少的字形将呈现为块,不正确的编码将呈现为问号。

    要测试,只需用正确的Unicode转义符替换字符串,并验证字符是否呈现在屏幕上。

        2
  •  3
  •   Neil Coffey    15 年前

    如果您使用 慰问 你真的很幸运,你 可能 能够让控制台打印西里尔字符。

    但一般来说,控制台没有良好的字符集支持。

    以其他方式输出字符串会更可靠,例如将其打印到Swing组件。

        3
  •  2
  •   Steve McLeod    15 年前

    感谢所有有用的想法。

    我的问题的关键是这句话:

    Mac OS X 10.5 用Java 1.5,我有这个代码片段

    在我使用的IDE中,intellij的想法是显式地将文件编码设置为macroman。通过将项目的编码改为UTF-8,这个问题在没有任何代码更改的情况下得到了解决。

        4
  •  1
  •   Anton Kuzmin    15 年前

    如果您的字符串是从某个地方动态获取的,并且您需要确保它是根据需要进行编码的,那么可以使用一些将charset类型作为参数的String类构造函数来转换该字符串。