Java 读取到文件编码时显示字符

Java 读取到文件编码时显示字符,java,swing,file,character-encoding,Java,Swing,File,Character Encoding,当我将文本显示到文本区域时,文本编码有问题 问题是当出现类似于:éáè 我的文本区域中有取而代之 以下是读取我的文件的代码部分: private void importerActionPerformed(java.awt.event.ActionEvent evt) { jTabbedPane1.setSelectedIndex(0); try { JFileChooser exp

当我将文本显示到文本区域时,文本编码有问题

问题是当出现类似于:
éáè

我的文本区域中有
取而代之

以下是读取我的文件的代码部分:

private void importerActionPerformed(java.awt.event.ActionEvent evt) {                                         
    jTabbedPane1.setSelectedIndex(0);
    try {

        JFileChooser explorer = new JFileChooser(chemin);
        int answer = explorer.showOpenDialog(this);
        if (answer == JFileChooser.APPROVE_OPTION) {
            chemin = explorer.getCurrentDirectory().getAbsolutePath();

             String name = explorer.getSelectedFile().getCanonicalPath();
            System.out.println("name : "+name);

             texte.setText("");
             File file = new File(name);
             try {
             DataInputStream in = new DataInputStream(new FileInputStream(file));
             String result = in.readUTF();
             texte.setText(result);
             in.close();
             System.out.println("Erreur la");
             } catch (IOException e) {
             DataInputStream in = new DataInputStream(new FileInputStream(file));
             String result = null;
             result = "";
             byte[] buff = new byte[2048];
             int read = in.read(buff, 0, 2048);
             while (read >= 0) {
             String substr = new String(buff, 0, read);
             result += substr;
             read = in.read(buff, 0, 2048);
             }
             // System.out.println(result);
             Charset charset = Charset.forName("UTF-8");
             result = charset.decode(charset.encode(result)).toString();
             texte.setText(result);
             in.close();
             //System.out.println("Erreur la2");
             }              
        }
    } catch (Exception err) {
        JOptionPane.showMessageDialog(this, "Erreur lors du chargement du fichier", "Error", JOptionPane.WARNING_MESSAGE);
    }
}                                        
我的文本区域是:
texte.setText(结果)


你有什么想法吗?

如果你的文件编码是UTF-8,那就简单地读一下


Charset.encode方法需要unicode格式的字符串。事实上,java中的所有字符串都应该是unicode(utf16)。 这样做


并删除所有charset.encode/decode代码。

您的行
String substr=新字符串(buff,0,read)应该是

String substr = new String(buff, 0, read,"UTF-8"); 

构造函数
String(byte[]bytes,int offset,int length)
通过使用平台的默认字符集对指定的字节子数组进行解码来构造一个新字符串。

经过仔细考虑,我决定这是Swing。为了更快地获得更好的帮助,发布一个.Your-line
stringsubstr=newstring(buff,0,read)应该是
stringsubstr=新字符串(buff,0,读为“UTF-8”)另请参见“从流初始化…”。utf-8不是用于文件的编码页
String substr = new String(buff, 0, read, "UTF-8");
String substr = new String(buff, 0, read,"UTF-8");