'A' символ добавляется при чтении текста Unicode из TXT-файла в Android

1

Здравствуйте, я пытаюсь прочитать файлы 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

  • 0
    Если вы берете файл на компьютер, присутствует ли «а» в самих данных?
  • 0
    нет .. "a" не присутствует в текстовом файле, кстати, я проверил Character.UnicodeBlock символа 'a' и его арабские формы представления B
Показать ещё 1 комментарий
Теги:
unicode
hebrew

1 ответ

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 без спецификации". (Затем используется спецификация для идентификации файла, который, скорее всего, кодируется в UTF-8.) Мое предположение: у вас есть спецификация в ваших данных, и ваша программа читает ее и передает ее вам.

ЕСЛИ это ваша проблема, и ваш файл действительно закодирован в UTF-8, вы должны найти следующую последовательность байтов в начале файла: EF BB BF - это UTF-8 представление U + FFEF.

  • 0
    Благодаря Танатос, я не знал о существовании спецификации, и действительно EF BB BF была байтовой последовательностью в начале файла. Что я сделал, так это добавил оператор if, проверяющий, начинается ли строка с спецификации UTF-8, и если да, то я удаляю ее, и она работает ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню