Es gibt keine Standardzeichencodierung für JavaScript als solches. Ein JavaScript-Programm ist, soweit es die Spezifikationen betrifft, eine Folge von abstrakten Zeichen.Wenn die abstrakten Zeichen über ein Netzwerk übertragen oder nur auf einem Computer gespeichert werden, müssen sie irgendwie codiert werden, aber die Mechanismen dafür werden nicht vom ECMAScript-Standard gesteuert.
In Abschnitt 6 des Standards ECMAScript wird UTF-16 als Referenzcodierung verwendet, jedoch nicht als Standard. Die Verwendung von UTF-16 als Referenz ist logisch unnötig (es würde ausreichen, auf Unicode-Nummern zu verweisen), aber es wurde wahrscheinlich angenommen, dass es Leuten hilft.
Dieses Problem sollte nicht mit der Interpretation von String-Literalen oder Zeichenfolgen im Allgemeinen verwechselt werden. Ein Literal wie 'Φ' muss zusammen mit dem Rest des Programms codiert werden; Dies kann eine beliebige Codierung sein, aber nachdem die Codierung aufgelöst wurde, wird das Literal gemäß der Unicode-Nummer des Zeichens als Ganzzahl interpretiert.
Wenn ein JavaScript-Programm als solches (als "externe JavaScript-Datei") über das Internet übertragen wird, gilt RFC 4329, Scripting Media Types. Abschnitt 4 definiert den Mechanismus: In erster Linie werden Header wie HTTP-Header überprüft, und auf einen charset
Parameter wird vertraut. (In der Praxis geben Web-Server normalerweise keinen solchen Parameter für JavaScript-Programme an.) Zweitens wird die Stücklistenerkennung angewendet. Fehlt das, ist UTF-8 impliziert.
Der erste Teil des Mechanismus ist etwas mehrdeutig. Es könnte so interpretiert werden, dass es sich auf charset
Parameter in einem tatsächlichen HTTP-Header bezieht, oder möglicherweise auf charset
Parameter in script
Elemente erweitert werden.
Wenn ein JavaScript-Programm als eingebettet in HTML angezeigt wird, entweder über ein script
Element oder ein Ereignisattribut, dann ist seine Zeichencodierung natürlich dieselbe wie die des HTML-Dokuments. Abschnitt Specifying the character encoding der Spezifikation HTML 4.01 definiert den Auflösungsmechanismus in dieser Reihenfolge: charset
in HTTP-Header, charset
in meta
, charset
in einem Link, der gefolgt wurde, um auf das Dokument zugreifen, und schließlich Heuristiken (Raten), die viele Dinge beteiligt sein können; vgl. zum Komplex resolution mechanism in the HTML5 draft.
JavaScript-Zeichenfolgen sind immer UTF-16. – Pointy
Ich denke, das ist dann nur die Antwort. Bitte, wo ist das dokumentiert? –
Ich versuche es jetzt im Dokument ECMA-262 zu lokalisieren :-) – Pointy