Gremlin92
@Gremlin92
Целеустремленный

Проблема с кодировкой в консоли и файле?

Считал данные из файла, русские символы превратились в квадраты когда печатал их в консоль, думал что в файл запишу будет ок, но там тоже квадраты
читаю таким файл utf-8 такого вида:
Z:\Автоматизация\музыка для радио \Solarsoul\[2013] Defying Gravity [AR0003] WEB\11. Solarsoul - UDFy (13 Billion Light Years From Earth).mp3
633.6062585034014
Z:\Автоматизация\музыка для радио \Solarsoul\[2013] Defying Gravity [AR0003] WEB\02. Solarsoul - About Eternal Wandering and About The Earth (Memory of Ray Bradbury).mp3
613.564081632653
Z:\Автоматизация\музыка для радио \Solarsoul\[2013] Defying Gravity [AR0003] WEB\01. Solarsoul - A Star Is Born (Original Mix).mp3
328.80625850340135
Z:\Автоматизация\музыка для радио \Solarsoul\[2013] Defying Gravity [AR0003] WEB\14. Solarsoul - Defying Gravity (Nale Remix).mp3
304.99410430839004
...

код построчно
try {
            File file = new File("C:\\Users\\User\\source\\repos\\Project1\\Project1\\playlist4.m3u8");
            //создаем объект FileReader для объекта File
            FileReader fr = new FileReader(file);
            //создаем BufferedReader с существующего FileReader для построчного считывания
            BufferedReader reader = new BufferedReader(fr);
            // считаем сначала первую строку
            Type tmp = new Type();
            tmp.length = (float) 0.0;
            tmp.name = "";
            String line = reader.readLine();
            while (line != null) {
                tmp.name = line;
                line = reader.readLine();
                tmp.length = Float.parseFloat(line);
                music.add(tmp);
                //System.out.println(tmp.name+"\n"+tmp.length);
                // считываем остальные строки в цикле
                line = reader.readLine();
                tmp = new Type();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

записываю так
try(FileWriter writer = new FileWriter("playlist.m3u8", false))
        {
            writer.write("#EXTM3U\n");
	for (int i = 0; i < vec.size(); i++)
	{
		writer.write("#EXTINF:");
		writer.write((int)vec.get(i).length);
		writer.write(",");
		writer.write(vec.get(i).name);
		writer.write("\n");
		writer.write(vec.get(i).name);
		writer.write("\n");
	}    
            writer.flush();
        }
        catch(IOException ex){
             
            System.out.println(ex.getMessage());
        }

5dc4067f72c53818173527.png
  • Вопрос задан
  • 38 просмотров
Решения вопроса 1
Gremlin92
@Gremlin92 Автор вопроса
Целеустремленный
Немного ошибся файл в кодировке "windows-1251" был
try {
            File file = new File("C:\\Users\\User\\Desktop\\Tropic-Island\\Tropic-Island\\C++\\Project1\\Project1\\playlist4.m3u8");
            //создаем объект FileReader для объекта File
            //FileReader fr = new FileReader(file);
            
	    FileInputStream fStream = new FileInputStream(file);
            InputStreamReader fr = new InputStreamReader(fStream, "windows-1251");
            //создаем BufferedReader с существующего FileReader для построчного считывания
            BufferedReader reader = new BufferedReader(fr);
            // считаем сначала первую строку
            Type tmp = new Type();
            tmp.length = (float) 0.0;
            tmp.name = "";
            String line = reader.readLine();
            while (line != null) {
                tmp.name = line;
                line = reader.readLine();
                tmp.length = Float.parseFloat(line);
                music.add(tmp);
                //System.out.println(tmp.name+"\n"+tmp.length);
                // считываем остальные строки в цикле
                line = reader.readLine();
                tmp = new Type();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

вот и на всякий случай результат записал тоже в такую кодировку
try(Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("playlist.m3u8"), "windows-1251")))
        {
            
            writer.write("#EXTM3U\n");
	for (int i = 0; i < vec.size(); i++)
	{
		writer.write("#EXTINF:");
		writer.write(Integer.toString((int)vec.get(i).length));
		writer.write(",");
		writer.write(vec.get(i).name);
		writer.write("\n");
		writer.write(vec.get(i).name);
		writer.write("\n");
	}    
            writer.flush();
        }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы