Я пытался прочитать файл, и он выбрасывал символы. Я думаю, что это неправильная кодировка, но я пробовал разные типы кодирования без какого-либо прогресса. Код ниже, а также вывод. Любые идеи были бы хорошы.
InputStream HostFile = new FileInputStream(location + FileName);
Reader file = new InputStreamReader(HostFile, "UTF8");
PrintWriter writer = new PrintWriter(".\\Files\\TempFPF.txt", "UTF8");
while (file.ready()) {
writer.print((char) file.read());
}
writer.close();
Выход:
坕⁕ㄸ⼸㤰䴠剁䴯䕋匭义倠条റഊ嬊传偆崠ⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭⴭ坕さㄸ‸†㤰䅍㉒‹†䬠䭍ⵅ南卓†䈠㠷‹㝎㤸塅†䕒䕌十⁅㔱㤳〠䴸剁㤱䙏⁐‱††䕇⁎䥍䍔䕈䱌䤠呎ⵌ䡃乁䥇...
Входной файл представляет собой план полета. В нем 500 строк, так что плохо вставить несколько строк. UWU 818/09 MAR/MKE-SIN Страница 1 [ OFP ] ------------------------------------ ----------------------------------------------- UWU0818 09 МАР 2019 KMKE-WSSS B789 N789EX ВЫПУСК 1539 08 МАРТ 19 OFP 1 ПОКОЛЕНИЕ MITCHELL INTL- CHANGI WX PROG 0912 0915 0918 0921 1000 1003 1006 1009 OBS 0806 0806 0806 0806 0806 0806 0806 0806 ATC C/S UWU818 KMKE/MKE WSSS/SIN CRZ SYS CI 160
Но это все ASCII, как я это вижу здесь. Это правда... файл обычный ASCII? - Я не думаю, что это возможно, так как тогда вы не будете получать специальные символы в выводе, независимо от того, что вы делаете.
Я безуспешно пытался прочитать файл в формате ASCII. Notepad++ сообщает об этом как о кодировке файла UTF-8.
Я не рекомендую вам читать посимвольно, если исходный файл закодирован в utf8, потому что длина символа превышает один байт. Когда вы записываете его в новый файл, по умолчанию он преобразует символ длины в один байт в utf8, а конечный файл будет больше по размеру и отличается. Если ваш исходный файл является текстовым, читайте построчно, иначе по байтам. Пожалуйста, обратитесь к этим ссылкам для различных вариантов. Вы можете прочитать весь файл за одно чтение, если хотите. journaldev.com/867/java-read-text-файл




Я думаю, ваша проблема в том, что вы написали "UTF8", когда вместо этого должно быть "UTF-8" (обратите внимание на тире). Вы также можете использовать StandardCharsets.UTF_8.name(); из java.nio.charset.StandardCharsets
Вывод остается прежним даже с StandardCharsets.UTF_8.name() и добавлением тире в UTF-8.
Можете ли вы загрузить файл куда-нибудь, чтобы мы могли видеть, что с ним что-то не так?
Да, файл здесь: drive.google.com/open?id=15sZt4EPkaBScklgPw8L6UzVaWZdElJOZ Мне кажется, что я не получаю полной картины того, что делает код.
Используя предоставленный вами код и предоставленный вами файл, код работает для меня, и я не получаю никаких странных символов. Здесь должно быть что-то еще, что не так
Странный. буду копать дальше и посмотрю что найду
Когда я запускаю отладчик, он фактически не «захватывает» точку останова внутри метода.
Я обнаружил свою проблему, я вызывал неправильный метод, который задействовал другой считыватель файлового буфера, который читает файлы в UTF-16LE. Всем спасибо за помощь.
Можете ли вы предоставить свой входной файл?