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