Иероглифы вместо букв
При попытке считать из 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;
}
}
}
Источник: Stack Overflow на русском