Díky této změně se budou rozhraní API závislá na výchozí znakové sadě chovat konzistentně ve všech implementacích, operačních systémech, místních jazycích a konfiguracích. -- https://openjdk.org/jeps/400
Tomáš Pitner, Radek Ošlejšek, Marek Šabo, Jakub Čecháček pitner@muni.cz
národní prostředí, zahrnuje abecedu, kódování, zápis času/data, měny a národní jazyk
množina dostupných znaků, které program (typicky v řetězcích) může využít
kódování znaků na vnějších zařízeních
U mnoha (většiny) I/O operací a proudů lze při vytvoření navolit, které kódování se předpokládá nebo chce.
Nebo ponechat kódování výchozí (system-default) převzaté ze systému, kde aplikace (JVM) běží.
V některých případech je výchozí kódování nastaveno napevno bez ohledu na systémová nastavení.
Některé metody JDK neumožňují zadání znakové sady a vždy předpokládají "výchozí" znakovou sadu UTF-8 pouze pro danou metodu a bez ohledu na lokalizaci nebo konfiguraci systému.
Většina moderních systémů má UTF-8 stejně jako výchozí.
Např. metody utilitní třídy Files
vytvořené kvůli jednoduchosti použití:
Files.newBufferedReader(Path)
,
Files.newBufferedWriter(Path, OpenOption…)
,
Files.readAllLines(Path)
,
Files.write(Path, Iterable, OpenOption…)
či
Files.lines(Path)
.
Od Javy 18 je UTF-8 výchozí znakovou sadu standardních rozhraní API Javy:
Díky této změně se budou rozhraní API závislá na výchozí znakové sadě chovat konzistentně ve všech implementacích, operačních systémech, místních jazycích a konfiguracích. -- https://openjdk.org/jeps/400
out.println("Default Locale: " + Locale.getDefault());
out.println("Default Charset: " + Charset.defaultCharset());
out.println("file.encoding; " + System.getProperty("file.encoding"));
out.println("sun.jnu.encoding: " + System.getProperty("sun.jnu.encoding"));
out.println("Default Encoding: " + getEncoding());
Výše uvedený kód bude fungovat, deklarujeme-li na začátku import objektu out : import static java.lang.System.out; |
Vypíše se:
Default Locale: cs_CZ
Default Charset: UTF-8
file.encoding; UTF-8
sun.jnu.encoding: UTF-8
Default Encoding: UTF8