Почему иностранные символы не читаются с использованием inputStream? - PullRequest
1 голос
/ 04 июня 2011

У меня есть текстовый файл, который содержит данные, необходимые для предварительной загрузки в базу данных SQLite. Я сохранил в res / raw.

Я читаю весь файл, используя readTxtFromRaw(), затем использую класс StringTokenizer для обработки файла строка за строкой.

Однако String, возвращаемое readTxtFromRaw, не показывает иностранные символы в файле. Мне это нужно, так как часть текста на испанском или французском. Я что-то упустил?

Код:

String fileCont = new String(readTxtFromRaw(R.raw.wordstext));
StringTokenizer myToken = new StringTokenizer(fileCont , "\t\n\r\f");

Метод readTxtFromRaw:

private String readTxtFromRaw(Integer rawResource) throws IOException
{
    InputStream inputStream = mCtx.getResources().openRawResource(rawResource);
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    int i = inputStream.read();
    while (i != -1)
    {
        byteArrayOutputStream.write(i);
        i = inputStream.read();
    }
    inputStream.close();

    return byteArrayOutputStream.toString();
}

Файл был создан с использованием Eclipse, и в Eclipse все символы отображаются нормально.

Может ли это быть как-то связано с самим Eclipse? Я установил точку останова и проверил myToken в окне Watch. Я пытался вручную заменить странный символ на правильный (например, í или é), и он не позволил мне.

1 Ответ

1 голос
/ 05 июня 2011

Вы проверили несколько кодировок?

  • что такое кодировка вашего исходного файла?
  • что такое кодировка вашего выходного потока?

byteArrayOutputStream.toString() преобразуется в соответствии с кодировкой символов платформы по умолчанию.Так что, я думаю, он лишит иностранных символов или преобразует их так, чтобы они не отображались в вашем выводе.

Вы уже пытались использовать byteArrayOutputStream.toString(String enc)?Попробуйте "UTF-8" или "iso-8859-1" или "UTF-16" для кодировки.

...