2011-02-15 15 views
18

decir que tengo un script como el siguiente: <script type="text/javascript" src="myScript.js">¿Cuál es el valor predeterminado del atributo de juego de caracteres de una etiqueta de secuencia de comandos?

que he visto algunas fuentes en línea que dicen que si se omite el atributo charset, que por defecto es ISO-8859-1. He visto otros que afirman que asume la misma codificación que la página HTML que contiene la etiqueta del script. ¿Cuál es la verdad?

Necesito saber porque mi archivo JavaScript contiene cadenas literales que se insertarán en el HTML, y que incluyen caracteres no ASCII como el símbolo del euro (€). Me doy cuenta de que agregar un atributo de conjunto de caracteres o solo la codificación HTML de estos caracteres debería resolver mi problema, pero aún me gustaría entender el comportamiento predeterminado.

EDITAR: Para aclarar un punto, necesito saber no solo lo que dicen los estándares, sino cómo actúan realmente los navegadores. El comportamiento descrito aquí: http://joconner.com/2008/09/javascript-file-encoding/ parece sugerir que los navegadores no siempre asumen ISO-8859-1.

+1

yo esperaría que el comportamiento por defecto para ser dependiente en su servidor ** ** más que en el conjunto de caracteres definido en cualquiera de "encerrar" contenido. Sin embargo, no lo sé con certeza, así que publico como un comentario en lugar de una respuesta. – Ben

+0

IIRC, los navegadores predeterminados a "La codificación de la página en la que aparece el script, a veces incluso si el juego de caracteres dice lo contrario". Sin embargo, no tengo una fuente autorizada, así que dudo en poner esto como una respuesta. – Quentin

+0

@Ben Poole: Cuando dices que depende del servidor, ¿te refieres a los encabezados HTTP que envía el servidor, o algo ¿más? Quiero decir, en última instancia, es el navegador web el que tiene que descubrir cómo leer el guión, ¿verdad? –

Respuesta

6

El W3C tiene una forma estándar para un navegador para determinar la codificación de carbón, se puede leer sobre ello aquí: http://www.w3.org/TR/html4/charset.html#spec-char-encoding

En resumen, agentes de usuario conformes deben observar las siguientes prioridades cuando que determinan una del documento de carácter codificación (de más alta prioridad a más bajo):

  1. un parámetro HTTP "charset" en un campo "Content-Type".
  2. Una declaración META con "http-equiv" establecido en "Content-Type" y un valor establecido para "charset".
  3. El atributo del conjunto de caracteres establecido en un elemento que designa un recurso externo.

Además de esto lista de prioridades, la aplicación del usuario puede heurística de uso y configuración de usuario.Para ejemplo, muchos agentes de usuario utilizan una heurística para distinguir los diversos codificaciones utilizadas para el texto japonés. Además, los agentes de usuario tienen típicamente un definibles por el usuario, local predeterminada codificación de caracteres que se aplican en la ausencia de otros indicadores.

+1

Gracias por la respuesta. Aunque estoy un poco confundido por esto. ¿Esto está diciendo que el parámetro del juego de caracteres HTTP de la página HTML anulará el atributo del juego de caracteres del elemento de la secuencia de comandos? Si es así, el atributo de juego de caracteres no parece muy útil. O tal vez solo los encabezados HTTP de la llamada de script en sí tienen prioridad sobre su atributo de conjunto de caracteres. –

+2

@Tim: solo se refieren a los encabezados de respuesta para el archivo de script en sí. –

+0

Gracias Martin.Lo que quiero sacar de esto es que necesito asegurarme de que un conjunto de caracteres esté configurado en los encabezados HTTP del script o con el atributo charset del elemento script, de lo contrario, todas las apuestas estarán desactivadas. Estoy aceptando esto como la respuesta. –

0

Las cadenas de codificación HTML y su transferencia a variables de javascript pueden causar problemas, especialmente si usa códigos hexadecimales ya que js me dicen que prefiere octal.

Si puede trabajar en utf-8 como el conjunto de caracteres de sus páginas web, entonces js funciona con estos muy bien. Utilizo esto mucho y nunca ha habido necesidad de definir un conjunto de caracteres para los archivos de script incluidos.

+0

Desafortunadamente, en mi caso, no puedo controlar el conjunto de caracteres de las páginas HTML, ya que eso está controlado por nuestro cliente. Solo estoy agregando scripts. Y de hecho usan diferentes codificaciones en diferentes páginas de su sitio. –

2

De acuerdo con w3schools.com el valor es ISO-8859-1 y esto es compatible con todos los principales navegadores.

Según la HTTP 1.1 specification:

Cuando ningún parámetro charset explícito es proporcionada por el remitente, los subtipos de medios del tipo "texto" se define para que tenga un valor charset por defecto de "ISO-8859-1" cuando se recibe a través de HTTP. Los datos en juegos de caracteres que no sean "ISO-8859-1" o sus subconjuntos DEBEN etiquetarse con un valor de juego de caracteres apropiado. Ver la sección 3.4.1 para problemas de compatibilidad.

Por lo tanto, cualquier cosa que no se ajuste a esto técnicamente no sigue la especificación HTTP 1.1.

+5

Ese enlace es w3schools que, hasta donde sé, no está afiliado al W3C (a pesar del nombre similar). –

+0

puede sin embargo ser cierto que ese es el comportamiento correcto de acuerdo con el estándar W3C, pero esta descripción parece sugerir que el comportamiento no siempre es seguido: http://joconner.com/2008/09/javascript-file-encoding/ –

+0

¡Tienes razón! gracias por atrapar eso! –

1

HTML54.11.1 El elemento de script:

Si el elemento de script tiene un atributo charset, a continuación, dejar que la codificación de caracteres del bloque de script para este elemento de script sea el resultado de obtener una codificación desde el valor del atributo de conjunto de caracteres.

De lo contrario, vamos a la codificación de caracteres de retorno del bloque de script para este elemento de script sea la misma que la codificación del documento en sí.

La cotización vincula al elemento DOM document, que tiene una propiedad encoding.

TODO: cómo encontrar la codificación de ese objeto se determina a partir de los estándares.

Cuestiones relacionadas