4

問題: Java で読み取ったテキスト ファイル内のアラビア語が一連の疑問符として表示されます: ??????

コードは次のとおりです。

        File[] fileList = mainFolder.listFiles();
        BufferedReader bufferReader = null;
        Reader reader = null;


        try{

        for(File f : fileList){           
            reader = new InputStreamReader(new FileInputStream(f.getPath()), "UTF8");
            bufferReader = new BufferedReader(reader);
            String line = null;

            while((line = bufferReader.readLine())!= null){
               System.out.println(new String(line.getBytes(), "UTF-8"));
            }              

        }
        }
        catch(Exception exc){
            exc.printStackTrace();
        }

        finally {
            //Close the BufferedReader
            try {
                if (bufferReader != null)
                    bufferReader.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }

ご覧のとおり、さまざまな場所で UTF-8 エンコーディングを指定しましたが、それでも疑問符が表示されます。これを修正するにはどうすればよいでしょうか??

ありがとう

4

2 に答える 2

3

行を直接出力しようとする代わりに、各文字の Unicode 値を出力します。例えば:

char[] chars = line.toCharArray();
for (int i = 0; i < chars.length; i++)
{
    System.out.println(i + ": " + chars[i] + " - " + (int) chars[i]);
}

次に、関連する文字をUnicode コード表で調べます。

印刷が 63 であることがわかった場合、それらは本当に疑問符です...これは、テキスト ファイルが最初から真の UTF-8 ではないことを示唆しています。

一方、一部の文字では「?」が出力されている場合。63 以外の値の場合は、コンソールの表示に問題があり、データを正しく読み取っていることを示しています。

于 2010-12-22T23:36:45.143 に答える
2

交換

System.out.println(new String(line.getBytes(), "UTF-8"));

System.out.println(line);

charset 引数がない場合、つまり、プラットフォームのString#getBytes()デフォルトのエンコーディングを使用して、文字列からバイトを取得します。これは、UTF-8 自体ではない場合があります。すでにバイトを で UTF-8 として読み取っているInputStreamReaderので、後でやり取りする必要はありません。

さらに、表示コンソール (これらの行を読んでいる場所) が UTF-8 をサポートしていることを確認してください。たとえば Eclipse では、Window > Preferences > General > Workspace > Text File Encoding > Other > UTF-8でそれを行うことができます。

以下も参照してください。

于 2010-12-22T23:17:45.553 に答える