Firefox affiche des caractères incohérents au lieu d'une page Web

0

Sur cette page web http://taj.chass.ncsu.edu/Hindi.Less.05/dialog_script.html , firefox et opera fonctionnant sous windows et linux affichent le code source HTML parsemé de caractères incohérents (pour moi, ils apparaissent sous forme de losanges noirs avec des points d’interrogation), par opposition à une page Web rendue.

Parmi tous les navigateurs que j'ai essayés, seul Internet Explorer affiche correctement la page. J'aimerais beaucoup pouvoir utiliser le site Web avec Firefox sous Linux. Pour essayer d’afficher correctement la page, j’ai tenté de définir manuellement le codage des caractères sur chaque valeur disponible, mais sans succès. Avez-vous d'autres suggestions?

Babu
la source

Réponses:

5

Dans Firefox, utilisez

View- & gt; Character Encoding- & gt; More Encodings- & gt; UTF-16.

J'espère que cela pourra aider.

La plupart du texte de l'ordinateur est codé comme suit: ascii ou Unicode 8 bits (UTF-8)

Pour plus d'informations sur UTF-16 en particulier, consultez ici .

En général, si vous voyez le Dans Firefox, utilisez des "devinettes intelligentes" et essayez de changer les encodages de caractères. Généralement, cela fonctionne, bien que de temps en temps, en particulier avec Linux firefox, vous pouvez rencontrer des problèmes de polices de caractères.

Keck
la source
Merci! Je ne sais pas du tout comment j'ai raté celui-là ...
Babu
Chose étrange, mon Safari (sur un Mac) ne liste même pas UTF-16 en option. (Mais cela rend bien, même en sélectionnant explicitement Unicode (UTF-8) , alors que Firefox ne s’affiche pas lors de la sélection de UTF-8. Peut-être en safari Unicode (UTF-8) ressemble plus à "UTF-8 si aucune nomenclature n’est trouvée, sinon utilisez la nomenclature pour décider du codage Unicode")
Arjan
4

Bien que l’on puisse effectivement choisir manuellement un codage (sans oublier de le désactiver lors de la visite d’un autre site), le site Web aurait dû le spécifier correctement. Le serveur ou les pages Web elles-mêmes doivent spécifier quelque chose, sinon le navigateur ne peut que deviner. Et bien sûr, si un encodage est spécifié, le document HTML doit en fait utiliser ce codage. Pas tellement pour le site Web de la question, comme indiqué ci-dessous:

Pour voir si le serveur Web a spécifié quelque chose, il faut regarder le soi-disant en-têtes . Utilisation du service en ligne de web-sniffer.net pour révéler les en-têtes que vous obtiendrez:

HTTP/1.1 200 OK

Date:           Mon, 17 Aug 2009 17:47:03 GMT   
Server:         Apache  
Last-Modified:  Mon, 27 Nov 2006 23:38:49 GMT   
ETag:           "758b0606-1a316-4234309151440"  
Accept-Ranges:  bytes   
Content-Length: 107286  
Connection:     close   
Content-Type:   text/html; charset=utf-8 (BOM UTF-16, litte-endian)

La dernière ligne semble un peu étrange: comment le serveur peut-il prétendre que quelque chose est à la fois UTF-8 et UTF-16? La valeur pour charset devrait être l'un de ceux inscrit avec IANA (donc, par exemple, UTF-8 sans aucun commentaire). Cependant, en utilisant le Wireshark renifleur de paquets plutôt que le service en ligne révèle que le texte (BOM UTF-16, little-endian) est en fait un commentaire du service en ligne, non envoyé par le serveur Web.

Ainsi: le serveur Web affirme qu'il va nous envoyer un document HTML codé en UTF-8.

Cependant, le document HTML qui suit est incorrect (modifié pour la lisibilité):

ÿþ<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Lesson 5</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link href="main.css" rel="stylesheet" type="text/css">
  </head>
...

Ci-dessus, la ligne spécifiant le type de contenu doit être la première à apparaître dans la liste. <head>sinon, le navigateur ne saurait pas comment traiter les caractères spéciaux dans le <title>. Plus important encore, les deux premiers personnages impairs, ÿþ, sont en fait les codes hexadécimaux FF et FE qui, comme le service en ligne déjà noté, sont Byte-Order Mark pour UTF-16, little-endian.

Ainsi: le serveur Web a promis d’envoyer UTF-8 mais il a ensuite envoyé des marqueurs indiquant UTF-16 LE. Ensuite, dans le document HTML, il prétend utiliser à nouveau UTF-8.

En effet, Wireshark montre que le document HTML réel est codé en UTF-16. Cela implique que chaque caractère est envoyé en utilisant au moins deux octets (octets). Comme les 6 personnages de <html> sont envoyés en tant que 12 octets hexadécimaux 3C 00 68 00 74 00 6D 00 6C 00 3E 00. Cependant, ce site Web aurait très bien pu être en ASCII, car il ne semble pas utilisation des caractères non-ASCII du tout. Au lieu de cela, la source HTML est pleine de références de caractères numériques ( RCN ), tel que:

&#2351;&#2361; &#2342;&#2367;&#2354;&#2381;&#2354;&#2368;
&#2358;&#2361;&#2352; &#2361;&#2376;&#2404;

Un navigateur affiche ce qui précède sous la forme de दिल्ली शहर है।. Cependant, en raison de l'utilisation des NCR et de l'UTF-16, le caractère unique ( Unicode U + 092F ) nécessite jusqu’à 14 octets dans 26 00 23 00 32 00 33 00 35 00 31 00 3B 00, car il est écrit en utilisant NCR &#2351; tandis que les 7 caractères ASCII de la NCR elle-même sont codés en UTF-16. Lorsque vous n’utilisez pas de NCR, en UTF-8, ce seul single nécessiterait 3 octets ( E0 A4 AF ) et en UTF-16 deux octets ( 09 2F ).

UTF-16 représente une perte totale de bande passante pour cette source HTML, et le serveur n’utilise aucune compression non plus.

Arjan
la source
Grande réponse, et très complet. Je n'étais pas au courant de ce détail dans le DOCTYPE
Keck
Content-Type, c'est-à-dire pas DOCTYPE. (Heureux que les détails soient appréciés. Ceci est toujours la version bêta du SU, et donc de nombreux utilisateurs de SO et de SF, je suppose qu'au moins certains aimeraient connaître le contexte.)
Arjan
Merci pour une réponse très informative et approfondie. Je n'avais pas compris comment fonctionnaient les différentes méthodes d'encodage, et cela me semble assez intéressant. C'est quelque chose à lire, à tout le moins.
Babu