Иероглифы вместо букв

Рейтинг: 1Ответов: 0Опубликовано: 08.02.2023

При попытке считать из csv-файла в zip-архиве с помощью Scanner выводятся иероглифы. Если без указания кодировки, то в основном это ромбики со знаком вопроса внутри.

Если указать кодировку unicode: new Scanner(path, "Unicode");, то получаю китайские иероглифы. Использовать надо именно Scanner.

Так же выскакивает либо FileSystemException, либо TranslateToIOException и retrowAsIoException, либо какой-нибудь другой.

Вот мой код:

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;
 
public class JavaFileScanner {
 
    public static void main(String[] args) throws IOException {
       
        String fileName = "/storage/emulated/0/Documents/Jvdroid/single-files/_данные_Сбер_Java_20210407090226.zip";
        Path path = Paths.get(fileName);
        Scanner scanner = new Scanner(path);
         
        
        scanner.useDelimiter(System.getProperty("line.separator"));
        while(scanner.hasNext()){
            System.out.println("Строка: " + scanner.next());
        }
        scanner.close();
        
        scanner = new Scanner(Paths.get("/storage/emulated/0/Documents/Jvdroid/single-files/_данные_Сбер_Java_20210407090226.zip/city_ru.csv"));
        scanner.useDelimiter(System.getProperty("line.separator"));
        while(scanner.hasNext()){
            
            Employee emp = parseCSVLine(scanner.next());
            System.out.println(emp.toString());
        }
        scanner.close();
         
        
        scanner = new Scanner(System.in);
        System.out.println("Вводим первое слово: " + scanner.next());
    }
     
    private static Employee parseCSVLine(String line) {
         Scanner scanner = new Scanner(line);
         scanner.useDelimiter("\\s*,\\s*");
         String name = scanner.next();
         int age = scanner.nextInt();
         String gender = scanner.next();
         JavaFileScanner jfs = new JavaFileScanner();
         return jfs.new Employee(name, age, gender);
    }
 
    public class Employee{
        private String name;
        private int age;
        private String gender;
         
        public Employee(String n, int a, String gen){
            this.name = n;
            this.age = a;
            this.gender = gen;
        }
         
        @Override
        public String toString(){
            return "Name=" + this.name + "::Age=" + this.age + "::Gender=" + this.gender;
        }
    }
 
}

Ответы

Ответов пока нет.