web-dev-qa-db-fra.com

Pourquoi IE ne montre-t-il pas le texte encodé en UTF-8?

J'ai quelques caractères chinois que j'essaie d'afficher sur un site Web propulsé par Kentico. Ce texte est copié/collé dans l'éditeur Kenticos FCK, puis est enregistré et apparaît sur le site. Dans Firefox, Chrome et Safari, les personnages apparaissent exactement comme prévu. En IE 8 mode Standards, je ne vois que des cases.

Le texte est encodé en UTF-8, et pour autant que je sache, il est encodé correctement dans la réponse du serveur. Il y a un Content-Type: text/html; charset=utf-8 en-tête de réponse et <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> meta tag également sur la page. Lorsque je télécharge le code HTML à partir du serveur et compare les octets des caractères en question au document texte UTF-8 d'origine, les octets correspondent tous, sauf que le code HTML n'inclut pas de nomenclature.

Cela semble être spécifique à IE 8 en mode Standards. Dans IE 8 Quriks: cela fonctionne. IE 7 Standards) : cela fonctionne. IE 7 bizarreries: fonctionne. Je ne sais pas comment le mode standard causerait ce problème.

Étrangement, si je visualise la source depuis IE, les personnages apparaissent correctement dans la vue source.

Des suggestions sur ce qui pourrait mal se passer ici? Suis-je en train de manquer quelque chose d'évident?

27
mrdrbob

Je ne peux pas expliquer cela en détail. Mais c'est effectivement un problème connu.

Voici un petit extrait de code reproductible:

<!DOCTYPE html>
<html lang="en">
    <head><title>test</title></head>
    <body><p>&#65185;<br>0 0</p></body>
</html>

Enregistrez-le dans UTF-8 et affichez-le dans IE8. Tu ne vois rien. Remplacer 0 0 par 00 et rechargez la page. Ça marchera bien! C'est absolument étonnant. Bizarrement, en remplaçant 0 0 par a a ou la <br> par un </p><p> le corrigera également. Cela aura quelque chose à voir avec les échecs du rendu des espaces blancs.

Désolé, je n'ai pas de ressources faisant autorité le prouvant, mais ce n'est qu'une autre preuve qu'IE8 n'est pas aussi bon que nous le pensons. Votre meilleur pari est d'essayer de changer le HTML et/ou de le construire étape par étape pour qu'il fonctionne à un moment donné ou en vain, ajoutez la balise meta suivante à la tête pour forcer IE8 en mode IE7:

<meta http-equiv="X-UA-Compatible" content="IE=7" />
11
BalusC

Le codage par défaut IE est Europe de l'Ouest (ISO), vous devez donc le changer manuellement en UTF-8 ou appliquer IE pour utiliser un codage donné comme celui-ci:

  • HTML 4.01

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

  • HTML 5

    <meta charset="UTF-8">

Et vous devez également utiliser l'attribut lang dans <html> tag pour déclarer la langue

    <html lang="zh">

pour le chinois

8
Cassian

Juste une supposition sauvage, mais cela pourrait être un problème de police. Peut-être que les polices disponibles sur votre navigateur peuvent représenter lesdits caractères chinois.

3
troelskn

J'ai réussi à résoudre le même problème en changeant le format UTF du fichier en "UTF8 With Byte Order Mark".

(L'éditeur que j'utilise me permet de changer facilement de format de fichier, je ne sais pas comment procéder autrement, mais il vaut la peine de jeter un coup d'œil aux différents formats de fichier UTF, IE (8) n'aime tout simplement pas UTF8 sans les marques d'ordre des octets ...)

J'ai également pu reproduire l'extrait de la réponse ci-dessus;

<!DOCTYPE html>
<html lang="en">
    <head><title>test</title></head>
    <body><p>&#65185;<br>0 0</p></body>
</html>

Mais mes résultats étaient "intermittents" en mode UTF-sans BOM (parfois des accents apparaissaient, d'autres fois les caractères étranges, et cela ne ressemblait pas à un problème de rendu des espaces blancs pour moi ...) Notez que je tripotais avec lang = "fr" et lang = "es", mais dans tous les cas, la modification du format de fichier UTF semble avoir résolu définitivement mes problèmes d'affichage des accents. :)

Je ne connais pas à 100% UTF, mais si les caractères sont codés en utilisant 2 octets, il faudrait supposer que les problèmes d'espace blanc et les caractères mal compris pourraient être liés à des octets mal alignés dans les sources.

2
Selt

Cela peut être le même genre de chose qui a amené Rails 3 à ajouter un caractère bonhomme de neige à leur sortie: Quel est le paramètre _snowman dans Ruby sur Rails 3 formulaires pour?

0
Jon Smock