Первый символ чтения из текстового файла: ï "¿

Если я напишу этот код, я получаю это как вывод → This first: ï "¿  а затем другие строки

try {
    BufferedReader br = new BufferedReader(new FileReader(
            "myFile.txt"));

    String line;
    while (line = br.readLine() != null) {
        System.out.println(line);
    }
    br.close();

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

Как я могу избежать этого?

Ответ 1

Вы получаете символы ï "¿в первой строке, потому что эта последовательность является символом порядка байтов UTF-8 (BOM). Если текстовый файл начинается с спецификации, вероятно, он был сгенерирован программой Windows, например" Блокнот".

Чтобы решить вашу проблему, мы решили явно прочитать файл как UTF-8, а не любую кодировку по умолчанию по умолчанию (US-ASCII и т.д.):

BufferedReader in = new BufferedReader(
    new InputStreamReader(
        new FileInputStream("myFile.txt"),
        "UTF-8"));

Тогда в UTF-8 последовательность байтов ï "¿декодирует один символ, который является U + FEFF. Этот символ является необязательным - законный файл UTF-8 может начинаться с него или не начинаться с него. Поэтому мы пропустим первый символ, только если он U + FEFF:

in.mark(1);
if (in.read() != 0xFEFF)
  in.reset();

И теперь вы можете продолжить с остальной частью своего кода.

Ответ 2

Проблема может заключаться в использовании кодировки. попробуйте следующее:

BufferedReader in = new BufferedReader(new InputStreamReader(
      new FileInputStream("yourfile"), "UTF-8"));