Non esiste una codifica di caratteri predefinita per JavaScript. Un programma JavaScript è, per quanto riguarda le specifiche, una sequenza di caratteri astratti.Quando vengono trasmessi su una rete, o semplicemente memorizzati in un computer, i caratteri astratti devono essere codificati in qualche modo, ma i meccanismi per esso non sono controllati dallo standard ECMAScript.
La sezione 6 dello standard ECMAScript utilizza UTF-16 come codifica di riferimento, ma non lo designa come predefinito. L'utilizzo di UTF-16 come riferimento non è logicamente superfluo (sarebbe sufficiente fare riferimento ai numeri Unicode), ma probabilmente è stato pensato per aiutare le persone.
Questo problema non deve essere confuso con l'interpretazione di stringhe letterali o stringhe in generale. Un letterale come "Φ" deve essere in qualche codifica, insieme al resto del programma; questa può essere una qualsiasi codifica, ma dopo che la codifica è stata risolta, il valore letterale sarà interpretato come un numero intero in base al numero Unicode del carattere.
Quando un programma JavaScript viene trasmesso come tale (come un "file JavaScript esterno") su Internet, vale RFC 4329, Tipi di supporti di scripting. La clausola 4 definisce il meccanismo: in primo luogo, le intestazioni come le intestazioni HTTP vengono controllate e un parametro charset
su cui verrà eseguito l'attendibile. (In pratica, i server web di solito non specificano un tale parametro per i programmi JavaScript.) In secondo luogo, viene applicato il rilevamento BOM. In caso contrario, UTF-8 è implicito.
La prima parte del meccanismo è piuttosto ambigua. Potrebbe essere interpretato come relativo al parametro charset
solo in un'intestazione HTTP effettiva oppure potrebbe essere esteso ai parametri charset
negli elementi script
.
Se un programma JavaScript appare come incorporato in HTML, tramite un elemento script
o qualche attributo evento, la codifica dei caratteri è ovviamente la stessa di quella del documento HTML. La sezione Specifying the character encoding della specifica HTML 4.01 definisce il meccanismo di risoluzione, in questo ordine: charset
nell'intestazione HTTP, charset
in meta
, charset
in un collegamento seguito per accedere al documento e infine euristica (congettura), che può comportare molte cose; cf. al complesso resolution mechanism in the HTML5 draft.
Le stringhe JavaScript sono sempre UTF-16. – Pointy
Immagino che sia solo la risposta allora. Per favore, dove è documentato? –
Sto cercando di individuarlo nel documento ECMA-262 ora :-) – Pointy