I/O plików z domyślnym zestawem znaków na jawne StandardCharsets
Używaj czytników i zapisów Files ze stałymi StandardCharsets zamiast polegać na domyślnym zachowaniu zestawu znaków platformy i wyszukiwaniu po nazwie.
Porównanie kodu
✕ Platform-default charset
try (Reader reader = new FileReader(path.toFile())) {
return readAll(reader);
}
✓ Explicit standard charset
try (BufferedReader reader = Files.newBufferedReader(
path, StandardCharsets.UTF_8)) {
return readAll(reader);
}
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Przenośne wyniki
Te same bajty są dekodowane identycznie na każdej maszynie.
Predefiniowana stała
StandardCharsets.UTF_8 nie może zawierać błędnie napisanej nazwy zestawu znaków.
Nowoczesne API plików
Path, buforowanie i kodowanie są wyrażone w jednej operacji.
Stare podejście
Domyślny zestaw znaków platformy
Nowoczesne podejście
Jawny standardowy zestaw znaków
Od JDK
7
Poziom trudności
Początkujący
Wsparcie JDK
I/O plików z domyślnym zestawem znaków na jawne StandardCharsets
Dostępne
Szeroko dostępne od JDK 7 (lipiec 2011)
Jak to działa
Konstruktory Reader i Writer, które polegają na domyślnym zestawie znaków, sprawiają, że zachowanie pliku zależy od środowiska uruchomieniowego. Files.newBufferedReader() i newBufferedWriter() przyjmują jawny Charset, podczas gdy StandardCharsets zapewnia gwarantowane stałe, takie jak UTF_8, bez wyszukiwania po ciągu znaków ani UnsupportedCharsetException.
Powiązana dokumentacja
Dowód