2012-07-07 153 views
3

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

+4

你能告诉我们你是如何从文件中读取这些字符并使用它们的? – Pshemo 2012-07-07 18:34:37

回答

3

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

new FileReader("file.txt") 

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

而是使用下面的代码片段:

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

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

+1

就是这样,非常感谢。 – 2012-07-07 21:58:23

0

也许这个例子会有所帮助。我将尝试将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 

但是从系统控制台输出将是

enter image description here

+0

感谢您的帮助 – 2012-07-07 21:59:42

+0

如果我的回答真的有点帮助,我很高兴:) – Pshemo 2012-07-07 22:02:56