您好我正在尝试在我的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
答案 0 :(得分:2)
为了得到更好的答案,我需要回答两个问题:
我将在这里猜一下:你说这个字符是文件中的第一个字符(“附加在字符串的开头”),并且你在阿拉伯语演示文稿表格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表示。