1

こんにちは私はAndroidアプリケーションでヘブライ語の文字を含むUTF-8でエンコードされたtxtファイルを読み込もうとしていますが、なんらかの理由で「a」文字が常に文字列の先頭に追加されています。どうして

これが私のコードです:

        void Read(){
        try {
            File fileDir = new File("/sdcard/test.txt");

            BufferedReader in = new BufferedReader( new InputStreamReader(
                          new FileInputStream(fileDir), "UTF8"));

            String str;

            while ((str = in.readLine()) != null) {
                    Log.i("TEST",str);
            }

                    in.close();
            } 
            catch (UnsupportedEncodingException e) 
            {
                System.out.println(e.getMessage());
            } 
            catch (IOException e) 
            {
                System.out.println(e.getMessage());
            }
            catch (Exception e)
            {
                System.out.println(e.getMessage());
            }
        }

これは私が得た結果です

05-15 01:53:25.269:INFO / TEST(16236):אבגדהוזחטיכלמנסעפצקרשת a

4

1 に答える 1

2

より良い答えを得るために、私は2つの質問に答える必要があります:

  • 問題のキャラクター(あなたの「a」)の正確なコードポイントは何ですか?
  • 疑わしい領域の周りのファイル内の正確なバイトシーケンスは何ですか?

ここで推測します。文字はファイルの最初のものであり(「文字列の先頭に追加」)、アラビア語のプレゼンテーションフォームBブロックに戻ったと言います。奇妙なことにアラビア語とは関係のないアラビア語プレゼンテーションフォームBの最後の文字は、U + FFEF、つまりバイト順マーク(BOM)です。これは通常、UTF-16またはUTF-32でエンコードされたファイルの先頭に表示され、エンコードの「エンディアン」を識別します(UTF-32の場合と同様に、ファイルがUTF-16LEまたはUTF-16BEでエンコードされているかどうか)。ただし、UTF-8には「バイト順序」の概念がないため、通常はUTF-8データには表示されません。とは言うものの、一部の脳死したWindowsプログラムはそれをそこに貼り付け、「BOMなしのUTF-8」の追加オプションがあります。

これが問題であり、ファイルがUTF-8で純粋にエンコードされている場合は、ファイルの先頭近くに次のバイトシーケンスを見つけることができますEF BB BF。—これはU+FFEFのUTF-8表現です。

于 2011-05-19T08:22:52.767 に答える