Zeichenkodierungen variieren
Jedes Werkzeug kann Java-Quellcode in irgendeiner Codierung schreiben. Selbst die Idee der .java-Datei ist nicht durch die Java Language Spec definiert. Beliebige IDE können Java-Quellcode beliebig beibehalten † mit beliebiger Codierung.
Die Tools sind dafür verantwortlich, dass letztendlich ein Unicode-konformer Zeichenstrom in die Compiler-Toolchain eingefügt wird. Wie sie den Quellcode sammeln und beibehalten, hängt von den jeweiligen Tools ab.
Die Java Language Specification Zustände in Chapter 3 Lexical Structure:
Programme werden geschrieben, um den Unicode-Zeichensatz verwendet. Informationen über diesen Zeichensatz und die zugehörigen Zeichenkodierungen finden Sie unter http://www.unicode.org/.
So vermutlich eine Java-Quellcode-Datei einen Zeichenkodierungen mit Unicode gemeinsam wie UTF-8, UTF-16 oder UCS-2 verwenden würde.
Section 3.2 Lexical Translations erwähnt, dass ein Java-Programm eine Codierung wie ASCII durch Einbetten Unicode entkommt verwenden:
Unicode Entweichen der Form \ uxxxx, wobei xxxx ein hexadecimal Wert ist, stellt die Einheit UTF-16-Code deren Codierung ist xxxx.
Während UTF-8 ist in meiner Erfahrung üblich, das ist nicht die einzige mögliche Codierung. Sie müssen die Codierung einer bestimmten Quelldatei kennen oder erraten, und Sie müssen berücksichtigen, dass Unicode-Escapes erweitert werden.
Weitere Themen
By the way, beachten Sie, dass zumindest in der Oracle JDK, die byte order mark (BOM)optional to UTF-8 Dateien nicht in Java erlaubt ist aufgrund eines Fehlers (JDK-4508058), die nie (wegen der rückwärts fixiert werden -Kompatibilitätsprobleme).
Beachten Sie auch, dass line terminators variieren kann: die ASCII-Zeichen CR (CARRIAGE RETURN) oder LF (LINE FEED) oder CR LF.
White space variiert: RAUM (SP), CHARACTER TABULATION (HT) (horizontale Registerkarte), FORM FEED (FF), und Abschlusswiderstände.
Lesen Sie die Spezifikation für weitere Details.Zum Beispiel in Bezug auf das Ersatzzeichen:
Als besonderes Zugeständnis für die Kompatibilität mit bestimmten Betriebssystemen, die ASCII-SUB-Zeichen (\ u001a oder Steuer-Z) werden ignoriert, wenn es das letzte Zeichen in dem entkam Eingang Strom.
Über Zeichencodierung
Seien Sie sicher, dass Sie die Grundlagen von Unicode und der Zeichencodierung verstehen. Der beste Startpunkt: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) von Joel Spolsky.
† Auch soll Regeln wie „eine öffentliche Klasse pro .java-Datei“ kann eher durch bestimmte Werkzeuge definiert werden als von Java selbst. Die CodeWarrior Tools für Java Weg-zurück-wenn mehrere Klassen pro Datei unterstützt.
Nein. Sie müssen die Datei mit dem gleichen Zeichensatz lesen, mit dem die Datei gespeichert wurde, was auch immer das sein mag. Normalerweise ist dies die native Codepage des PC, z. 'CP1252', wenn Sie Windows in den USA betreiben. Sie können Ihre eigenen Java-Quellen standardisieren, um immer UTF-8 zu verwenden, wenn Sie möchten, aber alle Dateien, die Sie von woanders erhalten, müssen möglicherweise konvertiert werden. – Andreas
Also gibt es eine Möglichkeit, die Dateicodierung dann zu erkennen? –
Leider nicht. UTF-16-Dateien können normalerweise leicht durch eine Stückliste identifiziert werden. UTF-8-Dateien sollten keine Stückliste haben, daher gibt es keine Möglichkeit, den Unterschied zwischen einer UTF-8, CP1252, ISO 8859-1, CP1251 oder einer anderen Codepage wirklich zu erkennen. – Andreas