4

问题:java 读取的文本文件中的阿拉伯语单词显示为一系列问号:??????

这是代码:

        File[] fileList = mainFolder.listFiles();
        BufferedReader bufferReader = null;
        Reader reader = null;


        try{

        for(File f : fileList){           
            reader = new InputStreamReader(new FileInputStream(f.getPath()), "UTF8");
            bufferReader = new BufferedReader(reader);
            String line = null;

            while((line = bufferReader.readLine())!= null){
               System.out.println(new String(line.getBytes(), "UTF-8"));
            }              

        }
        }
        catch(Exception exc){
            exc.printStackTrace();
        }

        finally {
            //Close the BufferedReader
            try {
                if (bufferReader != null)
                    bufferReader.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }

正如你所看到的,我已经在不同的地方指定了 UTF-8 编码,但我仍然得到问号,你知道我该如何解决这个问题吗?

谢谢

4

2 回答 2

3

与其尝试直接打印该行,不如打印出每个字符的 Unicode 值。例如:

char[] chars = line.toCharArray();
for (int i = 0; i < chars.length; i++)
{
    System.out.println(i + ": " + chars[i] + " - " + (int) chars[i]);
}

然后在Unicode 码表中查找相关字符。

如果您发现它正在打印 63,那么这些确实问号……这表明您的文本文件一开始就不是真正的 UTF-8。

另一方面,如果对于某些字符,它会打印出“?” 但如果是 63 以外的值,则表明这是控制台显示问题,并且您正在正确读取数据。

于 2010-12-22T23:36:45.143 回答
2

代替

System.out.println(new String(line.getBytes(), "UTF-8"));

经过

System.out.println(line);

没有 charset 参数即使用String#getBytes()平台默认编码从字符串中获取字节,这可能不是 UTF-8 本身。您已经通过 UTF-8 读取字节InputStreamReader,因此您无需在之后来回按摩它。

此外,确保您的显示控制台(您正在阅读这些行的地方)支持 UTF-8。在例如 Eclipse 中,您可以通过Window > Preferences > General > Workspace > Text File Encoding > Other > UTF-8来做到这一点。

也可以看看:

于 2010-12-22T23:17:45.553 回答