LineNumberReader для поддержки кодировки UTF-8 - PullRequest
0 голосов
/ 12 марта 2012

Когда я пытаюсь прочитать текст из файла, основной текст не отображается правильно, используя LineNumberReader

Текст пытается прочитать из файла -

¥ · £ · € · $ · ¢ · ₡ · ₢ · ₣ · ₤ · ₥ · ₦ · ₧ · ₨ · ₩ · ₪ · ₫ · ₭ · ₮ · ₯ · ₹

Пример кода -

FileInputStream fis = null;
    try {
        fis = new FileInputStream("C:\\Users\\JavaUser4\\Desktop\\checkImort.txt");
        InputStreamReader streamReader = new InputStreamReader(fis, "UTF-8");
        LineNumberReader reader = new LineNumberReader(streamReader);
        String sLine = reader.readLine();
        System.out.println(sLine);
    } catch (Exception ex) {
    } finally {
        try {
            fis.close();
        } catch (IOException ex) {
        }
    }

Выход -

? ? ? ? ? ? $ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Пожалуйста, помогите правильно прочитать этот текст, используя LineNumberReader. Я предпочитаю оставаться на LineNumberReader, потому что я использовал RandomAccessFile, который был идеальным решением в соответствии с моим требованием

  • Открыть файл, содержащий текст в кодировке UTF-8.
  • Установить номер строки, с которой нам нужно начать чтение файла.
  • Считать 25 строк из текстового файла.
  • Получить последнюю позицию смещения.
  • Выход.
  • Снова откройте файл.
  • Установите номер строки, с которой нам нужно начать чтение следующих 25 строк из того же файла.
  • Считать 25 строк из текстового файла.
  • Получить последнее смещение.
  • и т. Д.

Недостаток: RandomAccessFile не поддерживает кодировку UTF-8, и я перешел на LineNumberReader, но то же самое происходит и здесь. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 12 марта 2012

Вы делаете чтение правильно (при условии, что файл фактически находится в кодировке UTF-8).

Проблема с выходом.

Поток вывода, в который вы пишете, вероятно, настроен для вывода в виде ISO-8859-1 или одного из его вариантов (я полагаю, вы используете это в Windows, поскольку это обычная проблема в Windows).

Обратите внимание, что вывод "?" часто вызывается тем фактом, что некоторый символ не может быть представлен в данной кодировке. Таким образом, ваш String содержит правильные символы (вы должны быть в состоянии проверить это в отладчике), но поток вывода не может записать это.

...