Tengo una página HTML que correctamente (la codificación del físico en el disco coincide con ella) anuncia que es Content-Type :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content=
"text/html; charset=utf-8">
<title> ...
Abrir el archivo desde el disco en el navegador (Google Chrome, Firefox) funciona bien.
Al solicitarlo a través de HTTP, el servidor web envía un encabezado de tipo de contenido diferente:
$ curl -I http://example.com/file.html
HTTP/1.1 200 OK
Date: Fri, 19 Oct 2012 10:57:13 GMT
...
Content-Type: text/html; charset=ISO-8859-1
(ver última línea). El navegador luego utiliza ISO-8859-1 para mostrar cuál es un resultado no deseado.
¿Hay alguna forma común de anular los encabezados del servidor enviados al navegador desde el documento HTML?
;charset=...
encabezado http? El sitio funciona muy bienContent-Type: text/html
, los diferentes archivos tienen diferentes codificaciones en el servidor. (Me temo que esto tampoco es posible, porque creo que lo busqué hace algunas semanas pero el resultado no fue del todo definitivo). En caso de que puedas arrojar algo de luz justo delante.Debería establecer algo como esto en su raíz .htaccess
fuente
No, no es posible desde el HTML. El encabezado de respuesta del servidor tiene prioridad sobre la metaetiqueta del documento. Como se especifica en 5.2.2 Especificación de la codificación de caracteres - Especificación HTML 4.01 :
Por lo tanto, esto requiere configuración en el lado del servidor. Sin embargo, a medida que el capítulo continúa:
En mi caso, el encabezado Content-Type del servidor contiene el tipo mime correcto pero el juego de caracteres incorrecto .
Al final resultó que, mi configuración httpd de Apache había configurado el
AddDefaultCharset
encendido que estaba agregando la; charset=ISO-8859-1
parte. Colocando en el directorio raíz del sitio web.htaccess
la siguiente línea:se eliminó la información del juego de caracteres:
(Ver última línea, sin
; charset=...
parte). Esto, en combinación con la metaetiqueta html, activa dichas heurísticas del navegador para hacerse cargo del conjunto de caracteres de la metaetiqueta. El sitio web está correctamente decodificado.Probado con:
Estos tres navegadores tenían problemas con la configuración original y funcionan ahora (todos en Fedora 17).
No tuve el problema en primer lugar. Ambos preferían UTF-8 de la metaetiqueta sobre la configuración ISO-8859-1 del servidor.
No es compatible con UTF-8, por lo que siempre elige Western (Latin1) independientemente de la configuración del servidor y la metaetiqueta.
fuente
Además de lo que se dijo aquí, intentaría usar el mismo juego de caracteres en todas las páginas, preferiblemente
UTF-8
(pero si casi todo es asíiso-8859-1
, use esto).Para verificar rápidamente el conjunto de caracteres de un archivo, puede intentar:
Para verificar el conjunto de caracteres de todos los archivos en el árbol, puede intentar:
o (llamando al
file
comando solo una vez):Para obtener un resumen, use la
-b
opción delfile
comando (para omitir los nombres de archivo) y canalice el resultado asort | uniq -c
.fuente