Warum .class ist UTF-8
Für Klassen, die für ein westliches Publikum geschrieben wurden, normalerweise meist ASCII, ist dies die kompakteste Kodierung.
aber Laufzeitklasse. ist UTF-16?
Zur Laufzeit ist es schneller, Zeichenfolgen zu bearbeiten, die eine Codierung mit fester Breite verwenden ( Why Java char benutzt UTF-16? ), also wurde UCS-2 gewählt. Dies wird durch den Wechsel von UCS-2 zu UTF-16 kompliziert, wodurch diese eine andere Codierung mit variabler Breite wird.
Wie in den Kommentaren zu dieser Frage angemerkt, ermöglicht es JEP 254 , dass sich die Laufzeitdarstellung in etwas platzsparender ändert (zB Latin-1).
Der Quellcode kann eine beliebige Kodierung haben. Sie können dem Compiler auch mitteilen, welche Kodierung verwendet werden soll. Verwenden Sie dazu -encoding
Flagge.
Die JVM verwendet UTF-16 und ist in der JLS :
Die Java-Programmiersprache repräsentiert Text in Sequenzen von 16-Bit-Code-Einheiten unter Verwendung der UTF-16-Codierung.
javac
encoding :
-encoding
encoding Legen Sie den Namen der Quelldatei-Codierung wie EUC-JP und UTF-8 fest. Wenn-encoding
nicht angegeben ist, wird der Standard der Plattform verwendet Konverter wird verwendet.
Jede Instanz der Java Virtual Machine hat einen Standardzeichensatz, Das kann oder darf nicht einer der Standard-Zeichensatz sein. Der Standard charset wird beim Start der virtuellen Maschine und in der Regel bestimmt hängt davon ab, welches Gebietsschema und welcher Zeichensatz vom zugrunde liegenden Element verwendet werden Betriebssystem.