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

标签 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:信息/测试(16236):אבגדהוזחטיכלמנסעפצקשתa

最佳答案

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

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

我将在这里进行猜测:您说该字符是文件中的第一个内容(“附加在字符串的开头”)并且您返回它在阿拉伯语表示形式 B block 中。奇怪的是,与阿拉伯语无关的阿拉伯语表示形式 B 的最后一个字符是 U+FFEF,即字节顺序标记 (BOM)。它通常出现在 UTF-16 或 UTF-32 编码文件的开头,并标识编码的“字节序”(文件是 UTF-16LE 还是 UTF-16BE 编码,UTF-32 也是如此)。但是,它通常不会出现在 UTF-8 数据中,因为 UTF-8 没有“字节顺序”的概念。也就是说,一些脑残的Windows程序会把它粘在那里,然后多了一个“UTF-8 without BOM”的选项。 (然后使用 BOM 来识别可能以 UTF-8 编码的文件。)我的猜测是您的数据中有 BOM,您的程序正在读取它并将其传递给您。

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

关于android - 从android中的txt文件读取unicode文本时附加'a'字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005341/

相关文章:

android - Cordova 在 Android 上打开本地 Pdf 文件

c - 输出 unicode wchar_t 字符

python - 在基于 Debian 的系统上,如何找到一种字体具有字形的 Unicode 代码点?

c# - 希伯来语和符号的正则表达式

css - Highcharts 中的工具提示文本对齐方式为 'direction: rtl'

java - Google Places Details 搜索 System.err

java - AsyncTask 到 Azure - 服务器无法对请求进行身份验证

Android Studio 项目与 Github

c - 如何将代码点 32 位整数数组(UTF-32?)转换为 Windows native 字符串?

wpf - 使用 WPF(C#) 日历控件,希伯来语和格鲁吉亚日期转换