internet explorer - ¿Por qué IE no muestra el texto codificado en UTF-8?
internet-explorer unicode (5)
Este puede ser el mismo tipo de cosa que causó que Rails 3 agregara un personaje de muñeco de nieve a su salida: ¿Para qué sirve el param poroso en las formas de Ruby on Rails 3?
Tengo algunos caracteres chinos que estoy tratando de mostrar en un sitio web impulsado por Kentico. Este texto se copia / pega en el editor FCK de Kenticos y luego se guarda y aparece en el sitio. En Firefox, Chrome y Safari, los personajes aparecen exactamente como se esperaba. En el modo Estándares IE 8, solo veo cuadros.
El texto está codificado en UTF-8, y hasta donde sé, está codificado correctamente en la respuesta del servidor. Hay un tipo de Content-Type: text/html; charset=utf-8
cabecera de respuesta Content-Type: text/html; charset=utf-8
y una <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
en la página también. Cuando descargo el HTML del servidor y comparo los bytes de los caracteres en cuestión con el documento de texto original UTF-8, todos los bytes coinciden, excepto que el HTML no incluye una lista de materiales.
Esto parece ser específico de IE 8 en modo Estándares. En IE 8 Quriks: funciona. Estándares IE 7: funciona. IE 7 Quirks: Funciona. No estoy seguro de cómo el modo estándar podría causar este problema.
Extrañamente, si veo-fuente desde IE, los personajes aparecen correctamente en la vista de origen.
¿Alguna sugerencia sobre qué podría estar mal aquí? ¿Me estoy perdiendo algo obvio?
La codificación IE predeterminada es de Europa occidental (ISO), por lo que debe cambiarla manualmente a UTF-8 o aplicar IE para usar una codificación dada como esta:
HTML 4.01
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
HTML 5
<meta charset="UTF-8">
Y también necesita usar el atributo lang
en la etiqueta <html>
para declarar el idioma
<html lang="zh">
para chino
Logré solucionar el mismo problema cambiando el formato UTF del archivo a "UTF8 con marca de orden de bytes".
(El editor que uso me permite cambiar fácilmente los formatos de archivo, no estoy seguro de cómo proceder de otra manera, pero vale la pena echarle un vistazo a los diferentes formatos de archivos UTF, IE (8) simplemente no le gusta UTF8 Sin Marcas de Orden de Byte ...)
También pude reproducir el fragmento de la respuesta anterior;
<!DOCTYPE html>
<html lang="en">
<head><title>test</title></head>
<body><p>ﺡ<br>0 0</p></body>
</html>
Pero mis resultados fueron "intermitentes" mientras estaba en UTF-Sin BOM (a veces los acentos aparecían, otras veces los caracteres extraños, y no me parecía un problema de renderizado en blanco ...) Tenga en cuenta que estaba jugando con lang = "fr" y lang = "es", pero en todos los casos, cambiar el formato del archivo UTF parece haber resuelto permanentemente mis problemas de visualización de acentos. :)
No estoy 100% familiarizado con UTF, pero si los caracteres están codificados usando 2 bytes, uno debería suponer que los problemas de espacio en blanco y los caracteres no entendidos podrían estar relacionados con bytes mal alineados en las fuentes.
No puedo explicar esto en detalle. Pero este es de hecho un problema conocido.
Aquí hay un pequeño fragmento de código reproducible:
<!DOCTYPE html>
<html lang="en">
<head><title>test</title></head>
<body><p>ﺡ<br>0 0</p></body>
</html>
Guárdelo en UTF-8 y visualícelo en IE8. No ves nada Reemplace 0 0
por 00
y vuelva a cargar la página. ¡Funcionará bien! Esto es absolutamente asombroso. Extrañamente, reemplazar 0 0
por aa
o el <br>
por un </p><p>
lo arreglará también. Tendrá algo que ver con las fallas en la representación de espacios en blanco.
Lo siento, no tengo recursos de autoría que lo prueben, pero esta es solo otra evidencia de que IE8 no es tan bueno como esperamos. Su mejor opción es intentar cambiar el HTML y / o compilarlo paso a paso para que funcione en algún momento o cuando sea en vano, agregue la siguiente metaetiqueta al encabezado para forzar IE8 al modo IE7:
<meta http-equiv="X-UA-Compatible" content="IE=7" />
Solo una suposición descabellada, pero podría ser un problema de fuente. Tal vez las fuentes disponibles para su navegador puedan ''representar dichos caracteres chinos.