Java程序不打印西里尔字符,但只打印问号

时间:2014-09-23 15:57:52

标签: java encoding utf-8 character-encoding

我的代码(Qwe.java)

public class Qwe {
    public static void main(String[] args) {
        System.out.println("тест привет");
    }
}

其中

  

тестпривет

是俄语单词 QW.java,UTF-8 在我的机器上(ubuntu 14.04)结果是

  

тестпривет

服务器上的

(ubuntu 12.04)我有:

  

???? ??????

$ java Qwe>的test.txt 在test.txt中见

  

???? ??????

3 个答案:

答案 0 :(得分:1)

我修复它只是使用export JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8

答案 1 :(得分:0)

我不确定但是它可能只接受来自英语的ASCII字符,除非你有一些扩展或其他东西。但就像我说的那样,我最好的猜测是找不到角色,只是在他们的位置输出垃圾。

“Java,通过OutputStream的write()方法传递的任何未知字符都打印为普通问号”?“”

取自here

答案 2 :(得分:0)

java源文本必须使用与javac编译器相同的编码。这似乎是这种情况,UTF-8当然是理想的。

文件Qwe.class没问题,内部使用Unicode for String。控制台的输出使用服务器平台编码。也就是说,java可能使用默认(平台)编码将Unicode中的文本转换为字节,并且无法处理Cyrillic。

所以你必须写一个文件,从不使用FileWriter(仅用于本地文件的实用程序类),而是使用:

... new OutputStreamWriter(new FileOutputStream(file), "UTF-8")

您也可以在服务器上设置用户区域设置,但这不是我的啤酒。

一般情况下,我会切换到文件记录器。