3

我已经完成了一个项目,其中我从一个用记事本编写的文本文件中读取。我的文本文件中的字符是阿拉伯语,文件编码类型是 UTF-8。在 Netbeans(7.0.1) 中启动我的项目时,一切似乎都很好,但是当我将项目构建为 (.jar) 文件时,字符以这种方式显示:ÇáãæÇÞÚááÊØæíÑ。请问我该如何解决这个问题?

4

2 回答 2

3

您很可能在某处使用 JVM 默认字符编码。如果您 100% 确定您的文件是使用 UTF-8 编码的,请确保在读取时也明确指定 UTF-8。例如这段代码被破坏了:

new FileReader("file.txt")

因为它使用 JVM 默认字符编码 - 您可能无法控制它,而且显然 Netbeans 使用 UTF-8,而您的操作系统定义了不同的东西。请注意,FileReader如果您希望代码可移植,这会使类完全无用。

而是使用以下代码片段:

new InputStreamReader(new FileInputStream("file.txt"), "UTF-8");

您没有提供代码,但这应该会给您一个应该如何实现的总体印象。

于 2012-07-07T19:01:40.463 回答
2

也许这个例子会有所帮助。我将尝试将 utf-8 文件的内容打印到以“Cp852”编码的 IDE 控制台和系统控制台。

我的d:\data.txt包含ąźżćąś adsfasdf

让我们检查一下这段代码

//I will read chars using utf-8 encoding
BufferedReader in = new BufferedReader(new InputStreamReader(
        new FileInputStream("d:\\data.txt"), "utf-8"));

//and write to console using Cp852 encoding (works for my windows7 console)
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out,
        "Cp852"),true); // "Cp852" is coding used in
                    // my console in Win7

// ok, lets read data from file
String line;
while ((line = in.readLine()) != null) {
    // here I use IDE encoding
    System.out.println(line);
    // here I print data using Cp852 encoding
    out.println(line);
}

当我在 Eclipse 中运行它时,输出将是

ąźżćąś adsfasdf
Ą«ľ†Ą? adsfasdf

但系统控制台的输出将是

在此处输入图像描述

于 2012-07-07T19:09:58.937 回答