Здравствуйте, я пытаюсь прочитать файлы txt с кодировкой UTF-8 с ивритскими символами в приложении для Android, и теперь, после управления, по какой-то причине 'a' char всегда добавляется в начале строки, которую я читаю.. и мне интересно, почему
Вот мой код:
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
Чтобы получить лучший ответ, мне нужно ответить на два вопроса:
Я собираюсь угадать здесь: вы говорите, что символ - это первое, что есть в файле ( "добавлено в начале строки" ), и вы вернули его в блоке "Презентационные формы B". Последний символ арабских презентационных форм B, который странно не имеет ничего общего с арабским, - это U + FFEF или знак порядка байтов (BOM). Он обычно появляется в начале кодированных UTF-16 или UTF-32 файлов и идентифицирует "endianess" кодировки (независимо от того, закодирован ли файл UTF-16LE или UTF-16BE, аналогично для UTF-32). Однако, как правило, это не отображается в данных UTF-8, поскольку UTF-8 не имеет понятия "порядок байтов". Тем не менее, некоторые мозговые программы Windows будут придерживаться его там, а затем иметь дополнительную опцию "UTF-8 без спецификации". (Затем используется спецификация для идентификации файла, который, скорее всего, кодируется в UTF-8.) Мое предположение: у вас есть спецификация в ваших данных, и ваша программа читает ее и передает ее вам.
ЕСЛИ это ваша проблема, и ваш файл действительно закодирован в UTF-8, вы должны найти следующую последовательность байтов в начале файла: EF BB BF
- это UTF-8 представление U + FFEF.