2014-09-23 35 views
3

我的代码(Qwe.java)Java程序不打印斯拉夫文字,但只有问号

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

其中

тестпривет

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

тестпривет服务器上

(Ubuntu的12.04),我有:

???? ??????

$ java的QWE>的test.txt在test.txt的 是看

???? ??????

+0

我最好的猜测是,它不能中断的话,并因此刚出来把垃圾。 – jgr208 2014-09-23 16:00:50

+0

System.out.println(“тест”);是相同的结果 - ???? – user1182583 2014-09-23 16:04:13

回答

0

我不确定,但它可能只接受来自英语的ASCII字符,除非你有一些扩展或什么。但就像我说过的,我最好的猜测是它没有找到人物,只是在他们的位置输出垃圾。

“的Java,这是通过写入传递()的OutputStream的方法得到印刷作为一个纯问号任何未知的字符‘?’”

here

0

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

文件Qwe.class很好,内部使用Unicode作为String。输出到控制台使用服务器平台编码。也就是说,java将Unicode中的文本转换为可能使用默认(平台)编码的字节,并且不能处理西里尔文。

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

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

您还可以设置用户语言环境中的服务器上,但不是我的啤酒。

通常我会切换到文件记录器。

+0

我的项目使用log4j的结果相同。我在我的日志文件中看到:???? ??? ?? – user1182583 2014-09-23 16:22:10

+0

因为它们是java的未知字符。你必须做更多的研究才能让所有的uni-code字符在java中工作 – jgr208 2014-09-23 16:27:07

+0

@ user1182583在log4j中,必须将'encoding'参数设置为UTF-8。请参阅http://rhythmcloud.blogspot。de/2009/10/set-character-encoding-to-log4js-file.html – 2014-09-23 16:28:56

1

我修复它只是利用出口JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8