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)ターは、プラットフォームの既定の文字セットを使用して、指定されたバイトのサブ配列をデコードすることにより、新しい String を構築します。

于 2013-01-01T15:06:25.330 に答える