Wie bestimmt die JVM die (Standard-?) Zeichencodierung für argv unter Linux?

Java hat eindefault character encoding, das in Kontexten verwendet wird, in denen eine Zeichenkodierung nicht explizit angegeben wird. Die Dokumentation fürWi es wählt, dass die Kodierung vage ist:

Der Standardzeichensatz wird beim Start der virtuellen Maschine festgelegt und hängt in der Regel vom Gebietsschema und dem Zeichensatz des zugrunde liegenden Betriebssystems ab.

Diese Dokumentation muss vage sein, da die von der JVM verwendete Methode systemspezifisch ist.

Verwenden Sie die Standard-Zeichenkodierung häufig alseine schlechte Ide; Es ist besser, eine explizit angegebene Codierung zu verwenden oder für einige E / A-Vorgänge immer dieselbe Codierung zu verwenden. Eine unvermeidbare Verwendung der Standardzeichenkodierung scheint jedoch die Zeichenkodierung zu sein, die für Befehlszeilenargumente verwendet wird. Auf einem POSIX-System wie Linux erhält der native Code (C / C ++) der JVM die Befehlszeilenargumente als nullterminierte Liste von C / C ++ char Zeiger. Was als Byte-Zeiger gedacht werden sollte, da sie Codepunkte in @ codieren müsssome (unklare) Weise. Die JVM muss diese Sequenzen von C / C ++ @ interpretierechars (Bytes), um sie in eine Java @ -Sequenz umzuwandechars, an das @ übergeben werdmain() des Java-Programms. Ich gehe davon aus, dass die JVM hierfür die Standardzeichencodierung verwendet.

So muss ich genau wissen, wie die JVM die Standardcodierung für ein bestimmtes System (ein modernes GNU / Linux-Betriebssystem) bestimmt, damit ich Benutzerdokumentationen über das Verhalten meines Programms bereitstellen und Benutzer meines Programms vorhersagen können wie es sich verhalten wird.

Ich denke, die JVM untersucht einige Umgebungsvariablen, aber welche?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage