Java Scanner пропускает первую строку при чтении файла Unicode - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь прочитать текст в кодировке Юникод с помощью java Scanner. Но для первой строки он читается пустым, следующие строки читаются правильно. Если я добавлю текст на английском языке в первую строку файла, он будет читать правильно. Кто-нибудь может объяснить, почему это происходит?

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class Main {
  public static void main(String[] args) throws FileNotFoundException {
    Scanner sc = null;
    try {
        sc = new Scanner(new File("input.txt"), "UTF-8");
        while(sc.hasNext())
             System.out.println(sc.nextLine());

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
        if(sc!=null) sc.close();
    }
  }
}

Ниже приведено содержание input.txt

নমঃ নমঃ নামো   বাঙালাদেশ মম
চির মনোরম       চির মধুর
বৃকে নিরবধি       বহে শত নদী
চরণে জলধির      বাজে নূপুর।।
গ্রীষ্মে নাচে বামা   কালবোশেখি ঝড়ে
সহসা বরষাতে    কাঁদিয়া ভেঙ্গে পড়ে
শরতে হেসে চলে   শেফালিকা-তলে

и это результат выполнения вышеуказанного кода enter image description here

Я исследовал больше и обнаружил, что он читает 65279 символов в начале первой строки, и поэтому первая строка не отображается. Почему это происходит?

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

1 Ответ

0 голосов
/ 31 октября 2018

Я попытался запустить ваш точно такой же код и скопировал содержимое вашего файла (как вставлено) в файл в моем локальном каталоге, и это то, что я получаю как вывод программы:

নমঃ নমঃ নামো   বাঙালাদেশ মম
চির মনোরম       চির মধুর
বৃকে নিরবধি       বহে শত নদী
চরণে জলধির      বাজে নূপুর।।
গ্রীষ্মে নাচে বামা   কালবোশেখি ঝড়ে
সহসা বরষাতে    কাঁদিয়া ভেঙ্গে পড়ে
শরতে হেসে চলে   শেফালিকা-তলে

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

Вот как выглядит файл:

/tmp> cat input1.txt 
নমঃ নমঃ নামো   বাঙালাদেশ মম
চির মনোরম       চির মধুর
বৃকে নিরবধি       বহে শত নদী
চরণে জলধির      বাজে নূপুর।।
গ্রীষ্মে নাচে বামা   কালবোশেখি ঝড়ে
সহসা বরষাতে    কাঁদিয়া ভেঙ্গে পড়ে
শরতে হেসে চলে   শেফালিকা-তলে

/tmp> wc -c input1.txt
     518 input1.txt

Как видите, файл показывает то же самое, что и выходные данные, и общее количество символов, подсчитанное wc -c, составляет всего 518, а не 65K +, которые вы упоминаете в своем посте. Можете ли вы повторить, используя текст, который вы вставили в свой вопрос?

...