Ответ 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();
И теперь вы можете продолжить с остальной частью своего кода.