PrintReader返回不可读的字符

时间:2017-07-16 01:23:31

标签: java swing netbeans arabic readfile

我构建了一个读取xml文件的程序,当我在netbeans中运行它时,它可以工作,字符可读,看起来像图像opening in netbeans

但是当我从dist文件夹运行它时,它可以工作,但当我尝试打开包含阿拉伯语的文件夹时,它会显示图像中的字符 opening from dist folder

这是一些开场代码

int option = chooser.showOpenDialog(this);
    if(option == JFileChooser.APPROVE_OPTION){
        if(chooser.getSelectedFile()!=null){
            try {
                reader = new FileReader(chooser.getSelectedFile());
                BufferedReader buff = new BufferedReader(reader); 
                text.read(buff, null);
                opened = chooser.getSelectedFile();
                this.setTitle(chooser.getSelectedFile().getAbsolutePath());
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(null, "الملف غير موجود", "خطأ", JOptionPane.ERROR_MESSAGE);
            }finally{
                if(reader!=null)try {
                    reader.close();
                } catch (IOException ex) {

                }
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

FileReader是一个使用默认平台编码的旧实用程序类。这将因计算机而异,并且不可移植。

Path path = chooser.getSelectedFile().toPath();
text.read(Files.newBufferedReader(path, StandardCharsets.UTF_8)); 
//text.read(Files.newBufferedReader(path, Charset.forName("Windows-1256")); 

假设阿拉伯语文本存储为UTF-8或Windows-1256。