2012-01-12 22 views
13

Podemos declarar la codificación de caracteres en un archivo CSS individuales mediante los códigos siguientes:¿Cómo declarar la codificación de caracteres en un archivo JS INDIVIDUAL?

@charset "UTF-8";

Mi pregunta es:

¿Cómo declarar la codificación de caracteres en un archivo individual JS?

Si envío un archivo JS a mi amigo, espero que pueda entender la codificación de caracteres de este archivo JS desde los códigos cuando comienza a buscar o editar este archivo JS.

¡Gracias!

Respuesta

13

No puede. Sin embargo, puede definirlo en el script tag que trae el archivo a la página, usando el charset attribute. Esto debe coincidir con charset, si corresponde, en el Content-Type con el que sirve el archivo. Citando:

El atributo charset proporciona la codificación de caracteres del recurso de script externo. El atributo no se debe especificar si el atributo src no está presente. Si el atributo está establecido, su valor debe ser un nombre de codificación de caracteres válido, debe ser ASCII case-insensitive match para el preferred MIME name para esa codificación, y debe coincidir con la codificación dada en el parámetro charset del Content-Type metadata del archivo externo, si corresponde. [IANACHARSET]

Re tu edición:

Si envío un archivo JS a mi amigo, espero que él (ella) puede comprender esto JS codificación de caracteres del archivo de códigos en sí mismos cuando él (ella) comienza a navegar o editar este archivo JS.

Para eso, casi tendrá que decirle. Si el archivo está en UTF-8 o Windows-1252 o ISO 8859-1, desafortunadamente no hay un indicador en el archivo de la codificación disponible, así que incluiría un comentario al principio en las líneas de:

// Encoding: UTF-8 

Sin embargo, si está utilizando UTF-16 o UTF-32, debería poder decirle a su editor que use un BOM, que otros editores deberían ver y comprender (si son editores con capacidad Unicode). Esto normalmente solo se aplicaría si estuvieras escribiendo tus comentarios en un texto (lenguaje) que requiere muchos caracteres de varios bytes, y si tienes una alta proporción de comentarios a código (ya que el código está escrito con texto occidental), aunque por supuesto le invitamos a usar cualquier codificación que desee. Es solo que si la proporción de comentarios con respecto al código es baja, probablemente sea mejor que sigas con UTF-8 incluso si los comentarios están en un texto que requiere muchos caracteres de cuatro bytes, porque el código solo requerirá un byte por carácter. . (Mientras que en UTF-16, puede tener más caracteres de dos bytes en lugar de cuatro bytes en sus comentarios, pero el código siempre requerirá dos bytes por carácter, y en UTF-32, cuatro bytes por carácter. el archivo puede ser más grande aunque los comentarios ocupen menos espacio. Pero probablemente aquí estoy diciéndote cosas que ya sabes mucho mejor que yo, si estoy adivinando correctamente los motivos de la pregunta).

+0

También puede incluir una lista de materiales para UTF-8, y los navegadores lo respetan. – Andrea

+0

@Andrea: no todos los navegadores, no confiablemente. Establecer el 'charset' de la respuesta no es opcional, el RFC relevante dice claramente que sin uno, la respuesta es US-ASCII. Apenas hace un par de semanas había una pregunta sobre eso, IE estaba interpretando un JSON solicitado por jajax en UTF-8, pero Firefox estaba impidiendo el BOM, llamándolo JSON no válido. –

+0

@ T.J.Crowder ¿Qué RFC relevante? [La especificación de codificación de WHATWG dice que "la marca de orden de bytes (también conocida como lista de materiales) es más autoritativa que cualquier otra cosa"] (https://encoding.spec.whatwg.org/#specification-hooks).Por supuesto, debe incluir un juego de caracteres = si hace las cosas correctamente. – Andrea

3

Hay no es una construcción de JavaScript para declarar la codificación en el archivo en sí, de la manera que se puede hacer en CSS. La codificación debe ser comunicada a los destinatarios cuando se entregan los datos.Al enviar archivos como archivos adjuntos de correo electrónico, su programa de correo electrónico puede o no incluirlos con encabezados de tipo de contenido que indiquen la codificación (pero podría tener dificultades para determinar cuál podría ser la codificación).

También puede utilizar la Marca de orden de byte (BOM) al comienzo de un archivo codificado en UTF-8. Aunque no existe un problema de orden de bytes en UTF-8, la lista de materiales actúa como un indicador útil: un archivo que comienza con bytes que constituyen una lista de materiales en codificación UTF-8 probablemente esté codificado en UTF-8. Esta es la razón por la cual los programas bien pueden inferir la codificación, en ausencia de otra indicación. Esto, por supuesto, no es 100% confiable, pero es algo útil.

Muchos editores de texto tienen la opción de guardar su archivo como "UTF-8 codificado con una lista de materiales".

(En las páginas web, la lista de materiales una vez fue considerado como un riesgo, ya que se observaron los navegadores tratarlo como datos de caracteres. En estos días, la lista de materiales, incluso en UTF-8 es útil en lugar de un riesgo.)

3

Si está interesado en indicar la codificación del archivo de una manera legible para el ser humano, la idea T.J. Crowder's (agregar un comentario al archivo como // Encoding: UTF-8) es lo correcto. Y como señaló Jukka K. Korpela, también puede usar la lista de materiales.

Pero si desea una forma legible por máquina para indicar conjunto de caracteres que se declara en el documento hay un par de otras maneras:

Por ejemplo, en un servidor Apache httpd puede usar cualquiera de las siguientes declaraciones :

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

* No estoy interesado en hacer el caso para usar "application/javascript" sobre "text/javascript". Pero si estás interesado en saber por qué uno u otro podrían ser preferibles, cf. https://stackoverflow.com/a/4101763/1070047. Sin embargo, dado el tema, application/javascript parece bastante apropiado (especialmente si tiene la intención de utilizar una lista de materiales, porque indica que el código debe tratarse como un archivo binario).

Si se interpreta el código/procesado/del lado del servidor compilado (por ejemplo, PHP), puede configurar los encabezados en el documento, por ejemplo ...

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

al menos dentro de PHP, asegúrese de agregar esa cabecera declaración antes de que tenga lugar cualquier salida.

Por último, al determinar qué declaración utilizar, considere que (cuando se entiende/respeta, es decir, no en IE), la lista de materiales tiene mayor autoridad que los encabezados de los documentos. Y ambos tienen prioridad sobre las declaraciones de caracteres vinculados/de origen (como <script type="application/javascript" src="script.js" charset="utf-8"></script>).

Cuestiones relacionadas