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

Здравствуйте, я пытаюсь прочитать текстовые файлы в кодировке UTF-8 с ивритскими символами в моем приложении для Android, и теперь, после того, как по какой-то причине мне удалось это сделать, символ '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

1 Ответ

2 голосов
/ 19 мая 2011

Чтобы получить лучший ответ, мне нужно ответить на два вопроса:

  • Какова точная кодовая точка рассматриваемого символа (вашего "а")?
  • Какова точная последовательность байтов в вашем файле вокруг сомнительной области?

Я собираюсь сделать предположение здесь: вы говорите, что символ - это первое, что есть в файле ("добавляется вначало строки ") и что вы вернулись, это в блоке арабских презентационных форм B.Последний символ арабских форм представления B, который, как ни странно, не имеет ничего общего с арабским языком, - это U + FFEF или знак порядка байтов (BOM).Обычно он появляется в начале файлов в кодировке UTF-16 или UTF-32 и идентифицирует «конечность» кодирования (независимо от того, является ли файл кодированным UTF-16LE или UTF-16BE, также для UTF-32).Однако, как правило, он отсутствует в данных UTF-8, поскольку UTF-8 не имеет понятия «порядок следования байтов».Тем не менее, некоторые мёртвые программы Windows будут вставлять его туда, а затем иметь дополнительную опцию «UTF-8 без BOM».(Затем используется спецификация для идентификации файла, который, вероятно, закодирован в UTF-8.) Я предполагаю, что у вас есть спецификация в ваших данных, и ваша программа читает ее и передает вам.

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

...