从android中的txt文件中读取unicode文本时附加的'a'字符

时间:2011-05-14 23:07:44

标签: android unicode hebrew file-read

您好我正在尝试在我的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

1 个答案:

答案 0 :(得分:2)

为了得到更好的答案,我需要回答两个问题:

  • 相关字符的确切代码点(您的“a”)是什么?
  • 文件中的确切字节序列是什么,围绕可疑区域?

我将在这里猜一下:你说这个字符是文件中的第一个字符(“附加在字符串的开头”),并且你在阿拉伯语演示文稿表格B块中找回了它。阿拉伯语表达形式B的最后一个字符,与阿拉伯语无关,是U + FFEF,或字节顺序标记(BOM)。它通常出现在UTF-16或UTF-32编码文件的开头,并标识编码的“endianess”(无论文件是UTF-16LE还是UTF-16BE编码,同样适用于UTF-32)。但是,它通常不会出现在UTF-8数据中,因为UTF-8没有“字节顺序”的概念。也就是说,一些脑力不足的Windows程序会将其粘贴在那里,然后有一个“UTF-8无BOM”的附加选项。 (然后使用BOM来识别可能以UTF-8编码的文件。)我猜您的数据中有BOM,而您的程序正在读取它并将其传递给您。

IF 这是您的问题,并且您的文件是以UTF-8真正编码的,您应该能够在文件开头附近找到以下字节序列:EF BB BF - 这是U + FFEF的UTF-8表示。