2012-01-12 17 views
13

Possiamo dichiarare la codifica dei caratteri in un file CSS INDIVIDUALE dai codici di seguito:Come dichiarare la codifica dei caratteri in un file JS INDIVIDUALE?

@charset "UTF-8";

La mia domanda è:

Come dichiarare codifica dei caratteri in un singolo file JS?

Se invio un file JS al mio amico, spero che lui (lei) possa capire la codifica dei caratteri di questo file JS dai codici stessi quando inizia a sfogliare o modificare questo file JS.

Grazie!

risposta

13

Non è possibile. Tuttavia, è possibile definirlo nello script tag che porta il file nella pagina, utilizzando charset attribute. Deve corrispondere allo charset, se presente, nello Content-Type con cui viene servito il file. Citando:

L'attributo charset fornisce la codifica del carattere della risorsa di script esterna. L'attributo non deve essere specificato se l'attributo src non è presente. Se l'attributo è impostato, il suo valore deve essere un nome di codifica carattere valido, deve essere un ASCII case-insensitive match per la codifica preferred MIME name e deve corrispondere alla codifica fornita nel parametro charset dello Content-Type metadata del file esterno, se presente. [IANACHARSET]

Re tua modifica:

Se invio un file JS al mio amico, spero che lui (lei) può capire questo JS codifica dei caratteri del file dai codici stessi, quando lui (lei) inizia a browser o modificare questo file JS.

Per questo, devi praticamente dirglielo. Purtroppo, se il file è in UTF-8 o Windows-1252 o ISO 8859-1, non è presente alcun indicatore interno della codifica, quindi includo un commento all'inizio come segue:

// Encoding: UTF-8 

Se si utilizza UTF-16 o UTF-32, tuttavia, si dovrebbe essere in grado di dire all'editor di utilizzare uno BOM, che altri editor dovrebbero vedere e comprendere (se sono editor in grado di riconoscere Unicode). Questo di solito si applica solo se stavi scrivendo i tuoi commenti in un testo (lingua) che richiede molti caratteri multi-byte e se hai un elevato rapporto di commenti al codice (poiché il codice è scritto con testo occidentale), anche se ovviamente sei libero di usare qualsiasi codifica che ti piace. Solo che se il rapporto tra commenti e codice è basso, probabilmente stai meglio attenersi a UTF-8 anche se i commenti sono in un testo che richiede molti caratteri a quattro byte, perché il codice richiederà solo un byte per carattere . (Mentre in UTF-16, potresti avere più caratteri a due byte anziché a quattro byte nei tuoi commenti, ma il codice richiederebbe sempre due byte per carattere e in UTF-32 quattro byte per carattere. il file potrebbe essere più grande anche se i commenti occupano meno spazio, ma qui probabilmente ti sto dicendo cose che sai già molto meglio di me, se indovino correttamente le tue ragioni per la domanda.)

+0

È anche possibile includere una distinta base per UTF-8 e i browser lo rispettano. – Andrea

+0

@Andrea: non tutti i browser, non in modo affidabile. L'impostazione del 'charset' della risposta non è facoltativa, la RFC in questione dice chiaramente che senza uno, la risposta è US-ASCII. Solo un paio di settimane fa c'era una domanda al riguardo, IE stava interpretando un JSON richiesto da jax in UTF-8 ma Firefox stava eseguendo il balking sul BOM, chiamandolo JSON non valido. –

+0

@ T.J.Crowder Quale RFC rilevante? [Le specifiche di codifica di WHATWG dicono che "il byte order mark (anche noto come BOM) è più autorevole di qualsiasi altra cosa"] (https://encoding.spec.whatwg.org/#specification-hooks).Naturalmente, dovresti includere un set di caratteri = se fai le cose correttamente. – Andrea

3

Là non è un costrutto JavaScript per dichiarare la codifica nel file stesso, come si può fare in CSS. La codifica deve essere comunicata ai destinatari durante la consegna dei dati.Quando si inviano file come allegati di posta elettronica, il proprio programma di posta elettronica potrebbe o meno includerli con intestazioni Content-Type che indicano la codifica (ma potrebbe avere difficoltà a capire quale potrebbe essere la codifica).

È possibile anche un segno di ordine byte (BOM) all'inizio di un file con codifica UTF-8. Sebbene in UTF-8 non vi sia alcun problema di ordine dei byte, il BOM funge da indicatore utile: un file che inizia con byte che costituiscono una distinta componenti nella codifica UTF-8 è probabilmente codificato in UTF-8. Questo è il motivo per cui i programmi possono ben inferire la codifica, in assenza di altre indicazioni. Questo non è certo affidabile al 100%, ma una cosa utile.

Molti editor di testo hanno l'opzione di salvare il file come "UTF-8 codificato con una BOM".

(sulle pagine web, la distinta era un tempo considerata come un rischio, dal momento che i browser sono stati osservati a trattarlo come dati di caratteri. In questi giorni, la distinta anche in UTF-8 è utile, piuttosto che un rischio.)

3

Se sei interessato a indicare la codifica del file in un modo leggibile dall'uomo, l'idea di T.J. Crowder's (aggiungendo un commento al file come // Encoding: UTF-8) è la cosa giusta. E come sottolineato da Jukka K. Korpela, è possibile utilizzare anche il BOM.

Ma se volete un modo leggibile dalla macchina per indicare charset che è dichiarato nel documento ci sono un paio di altri modi:

Ad esempio, su un server httpd Apache si potrebbe utilizzare una delle seguenti dichiarazioni :

  1. AddDefaultCharset UTF-8
  2. AddCharset UTF-8 .js
  3. AddType 'application/javascript; charset=UTF-8' js *

* Non sono interessato a utilizzare il "application/javascript" su "text/javascript". Ma se sei interessato a sapere perché l'uno o l'altro potrebbe essere preferibile, cf. https://stackoverflow.com/a/4101763/1070047. Considerato l'argomento, tuttavia, application/javascript sembra abbastanza appropriato (specialmente se si intende utilizzare un BOM, poiché indica che il codice deve essere trattato come un file binario).

Se sarà interpretato il codice/elaborato/compilato lato server (ad esempio PHP), è possibile impostare le intestazioni nel documento, ad esempio ...

header("Content-Type: application/javascript; charset=utf-8");

almeno all'interno di PHP, assicurarsi di aggiungere che di testa dichiarazione prima che l'uscita abbia luogo.

Infine, quando si determina quale dichiarazione utilizzare, si consideri che (quando è compreso/onorato, cioè non in IE) la distinta base ha maggiore autorità delle intestazioni dei documenti. Entrambi hanno la precedenza sulle dichiarazioni del set di caratteri collegati/originati (come <script type="application/javascript" src="script.js" charset="utf-8"></script>).

Problemi correlati