0

当我将文本显示到我的文本区域时,我遇到了文本编码问题。

问题是当有这样的字符时:é à è

我在我的文本区域中? ? ?

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

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(result);

你有什么主意吗?

4

3 回答 3

0

如果您的文件编码是 UTF-8,那么只需像这里一样阅读它

BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
  result += line;
}
br.close();

texte.setText(result);
于 2013-01-01T15:00:23.183 回答
0

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

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

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

于 2013-01-01T15:04:50.070 回答
0

你的线路String substr = new String(buff, 0, read);应该是

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

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

于 2013-01-01T15:06:25.330 回答