如何更改Java程序的文本编码?

时间:2013-05-22 15:22:59

标签: java windows utf-8

我有一个Java-Programm,我用Netbeans开发。 我更改了Netbeans上的设置,以便它能理解UTF-8。

但是,如果我清理并构建我的程序并将其与我的Windows系统一起使用,则文本编码会发生变化并且字母如下:“ü”,“ä”和“ö”不再显示和使用。

我如何与我的操作系统通信并告诉他使用UTF-8?

或者有什么好的解决方法吗?

编辑:因为非常特殊而感到害怕。 好吧,首先:我使用Docx4j和Apache POI和getText()方法从doc,docx和pdf中获取一些文本并将它们保存在String中。

然后我尝试匹配那些文本中的关键字,我从.txt文件中读取。

这些关键字显示在可运行Java文件的Combobox中。 我可以在那里看到编码问题。它不会使用上述单词匹配任何关键字。

在我的IDE中它的工作正常。 在我重新设计它之后,我试图在这里发布一些代码。

TXT-File采用UTF-8格式。如果我转换它,我会看到像Jar一样的问题。 阅读它:

  if(inputfile.exists() && inputfile.canRead())
            {
                try {

                    FileReader reader = new FileReader(inputfilepath);
                    BufferedReader in = new BufferedReader(reader);
                    String zeile = null;

                    while ((zeile = in.readLine()) != null) {

                       while(zeile.startsWith("#"))
                       {
                           if (zeile.startsWith(KUERZELTITEL)) {
                               int cut = zeile.indexOf('=');

                               zeile = zeile.substring(cut, zeile.length());
                               eingeleseneTagzeilen.put(KUERZELTITEL, zeile.substring(1));
                               kuerzel = zeile.substring(1);
                           }

...

这对我来说是这样的:

                        File readfile   = new File(inputfilepath);
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(
                            new FileInputStream(readfile), "UTF8"));

THX!

2 个答案:

答案 0 :(得分:1)

恭喜,我也将UTF-8用于我的项目,这似乎是最好的。

只需确保编辑器和编译器使用相同的编码。这可以确保java中的字符串文字在jar,.class文件中正确编码。

在NetBeans 7.3中,现在有一个设置(我正在使用maven构建)。

属性文件历史上是ISO-8859-1或编码为\uXXXX。所以你必须要小心。

内部Java使用Unicode,因此可能没有其他问题。

FileReader reader = new FileReader(inputfilepath);

应该是

BufferedReader reader = new BufferedReader(new InputStreamReader(
    new FileInputStream(inputfilepath), "UTF-8")));

FileWriter(OutputStreamWriter + encoding),String.getBytes(encoding),new String(bytes,encoding)的相同过程(显式额外编码参数)。

答案 1 :(得分:0)

尝试将-Dfile.encoding = utf-8作为JVM参数传递。