Java PrintReader返回不可读的字符
我构建了一个程序,当我在netbeans中运行它时,它可以读取xml文件,并且字符可以从图像中读取 但当我从dist文件夹运行它时,它会工作,但当我试图打开包含阿拉伯语的文件夹时,它会显示图像中的字符 这是一些开场白Java PrintReader返回不可读的字符,java,swing,netbeans,arabic,readfile,Java,Swing,Netbeans,Arabic,Readfile,我构建了一个程序,当我在netbeans中运行它时,它可以读取xml文件,并且字符可以从图像中读取 但当我从dist文件夹运行它时,它会工作,但当我试图打开包含阿拉伯语的文件夹时,它会显示图像中的字符 这是一些开场白 int option = chooser.showOpenDialog(this); if(option == JFileChooser.APPROVE_OPTION){ if(chooser.getSelectedFile()!=null){
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) {
}
}
}
}
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。只是一个方便的类,它结合了InputStreamReader和FileInputStream。javadoc也这么说。尽管使用新的Path API很好,但没有必要。正如javadoc所说:此类的构造函数假定默认字符编码和默认字节缓冲区大小是合适的。要自己指定这些值,请在FileInputStream上构造InputStreamReader。这意味着新的InputStreamReaderNewFileInputStreamChooser.getSelectedFile,UTF-8也可以工作。@Andreas我想说的是FileReader不能指定编码;用于本地文件。方便类文件也很值得了解。InputStreamReader的优势在于其清晰的基本特性,它是binary~Stream和文本阅读器/编写器之间的桥梁。谢谢