从文本文件中读取阿拉伯语字符

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

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

new FileReader("file.txt") 

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

而是使用以下代码段:

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

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

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

我的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 

但系统控制台的输出将是

在此处输入图像描述