Firefox zeigt Müllzeichen anstelle von Webseiten an

8208
Babu

Auf dieser Webseite http://taj.chass.ncsu.edu/Hindi.Less.05/dialog_script.html zeigen Firefox und Oper, die unter Windows und Linux ausgeführt werden, die mit Müllzeichen durchsetzte Quell-HTML (für mich erscheinen sie schwarz) Diamanten mit Fragezeichen), im Gegensatz zu einer gerenderten Webseite.

Von allen Browsern, die ich ausprobiert habe, zeigt nur Internet Explorer die Seite ordnungsgemäß an. Ich möchte sehr gerne die Website mit Firefox unter Linux verwenden. Um zu versuchen, die Seite richtig anzuzeigen, habe ich versucht, die Zeichencodierung manuell auf jeden verfügbaren Wert festzulegen, hatte jedoch keinen Erfolg. Habt ihr noch andere Vorschläge?

0

2 Antworten auf die Frage

5
Keck

Verwenden Sie in Firefox

Ansicht-> Zeichenkodierung-> Weitere Kodierungen-> UTF-16.

Hoffentlich hilft das.

Die meisten Computertexte werden entweder als asciioder als 8-Bit-Unicode (UTF-8) codiert.

Weitere Informationen zu UTF-16 finden Sie hier .

Wenn Sie das in Firefox sehen, verwenden Sie im Allgemeinen "intelligentes Erraten" und versuchen Sie, die Zeichencodierung zu ändern. Normalerweise funktioniert dies, gelegentlich, insbesondere bei Linux Firefox, können jedoch Probleme mit der Schrift auftreten.

Vielen Dank! Ich bin mir überhaupt nicht sicher, wie ich das vermisst habe ... Babu vor 14 Jahren 0
Seltsamerweise listet mein Safari (auf einem Mac) nicht einmal UTF-16 als Option auf. (Auch wenn explizit * Unicode (UTF-8) * ausgewählt wird, ist die Wiedergabe gut, wohingegen Firefox bei der Auswahl von UTF-8 nicht angezeigt wird. In Safari * Unicode (UTF-8) * ähnelt es möglicherweise eher UTF-8 als Es wird keine Stückliste gefunden, andernfalls verwenden Sie die Stückliste, um die Unicode-Kodierung zu bestimmen. " Arjan vor 14 Jahren 0
4
Arjan

Zwar kann man tatsächlich eine Kodierung manuell auswählen (und nicht vergessen, diese bei einem Besuch einer anderen Website zu deaktivieren), aber eigentlich sollte die Website sie richtig angegeben haben. Entweder der Server oder die Webseiten selbst sollten etwas angeben. Andernfalls kann der Browser nur bestens raten. Und natürlich, wenn eine Codierung wird angegeben, dann das HTML - Dokument sollte in der Tat, dass die Codierung verwenden. Nicht so sehr für die Website aus der Frage, wie unten gezeigt:

Um zu sehen, ob der Webserver etwas angegeben hat, muss man sich die sogenannten Header ansehen . Verwenden Sie den Onlinedienst von web-sniffer.net, um die Kopfzeilen anzuzeigen, die Sie erhalten:

HTTP / 1.1 200 OK  Datum: Mo, 17 Aug 2009 17:47:03 GMT  Server: Apache  Zuletzt geändert: Mo, 27 Nov 2006 23:38:49 GMT  ETag: 758b0606-1a316-4234309151440  Accept-Ranges: Bytes  Inhaltslänge: 107286  Verbindung: schließen  Inhaltstyp: Text / HTML; Zeichensatz = utf-8 (BOM UTF-16, kleiner Endian)

Die letzte Zeile scheint etwas seltsam: Wie kann der Server behaupten, sowohl UTF-8 als auch UTF-16 zu sein? Der Wert für charsetsollte einer der bei IANA registrierten sein (also beispielsweise UTF-8 ohne Kommentare). Die Verwendung des Wireshark Packet Sniffer anstelle des Onlinedienstes zeigt jedoch, dass der Text (BOM UTF-16, litte-endian) tatsächlich ein Kommentar des Onlinedienstes ist und nicht vom Webserver gesendet wird.

Also: Der Webserver behauptet, dass er uns ein UTF-8-kodiertes HTML-Dokument senden wird.

Das folgende HTML-Dokument ist jedoch falsch (zur besseren Lesbarkeit bearbeitet):

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

Oben sollte die Zeile, die den Inhaltstyp angibt, die erste sein, die in <head>der angezeigt wird. Andernfalls kann der Browser nicht mit Sonderzeichen im Code umgehen <title>. Wichtiger noch, die ersten beiden ungeraden Zeichen ÿþsind in der Tat die Hexadezimal-Codes FF und FE, die, wie bereits erwähnt, der Byte-Order Mark für UTF-16 (Litte-Endian) sind.

Also: Der Webserver versprach, UTF-8 zu senden, sendete dann aber Markierungen, die auf UTF-16 LE hindeuteten. Als nächstes behauptet es im HTML-Dokument, UTF-8 erneut zu verwenden.

Tatsächlich zeigt Wireshark, dass das eigentliche HTML-Dokument UTF-16-codiert ist. Dies bedeutet, dass jedes Zeichen mit mindestens zwei Bytes (Oktetts) gesendet wird. Wie die 6 Zeichen <html>werden die 12 hexadezimalen Bytes gesendet 3C 00 68 00 74 00 6D 00 6C 00 3E 00. Dies könnte jedoch sehr Website sehr gut reine ASCII gewesen sein, da es nicht scheint verwendet überhaupt keine Nicht-ASCII - Zeichen. Stattdessen enthält die HTML-Quelle numerische Zeichenreferenzen ( NCRs ), z.

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

Ein Browser zeigt das oben als यह दिल्ली शहर है। an. Aufgrund der Verwendung von NCRs und UTF-16 erfordert das einzelne Zeichen य ( Unicode U + 092F ) jedoch bis zu 14 Byte 26 00 23 00 32 00 33 00 35 00 31 00 3B 00, da es mit NCR geschrieben wird, &#2351;während die 7 ASCII-Zeichen des NCR selbst mit UTF-16 codiert werden . Wenn keine NCRs verwendet werden, würde diese einzelne 3 in UTF-8 3 Byte ( E0 A4 AF) und in UTF-16 zwei Byte ( 09 2F) erfordern .

Für diese HTML-Quelle, die UTF-16 verwendet, ist insgesamt Bandbreite verschwendet, und der Server verwendet auch keine Komprimierung.

Tolle Antwort und sehr gründlich. In den DOCTYPE's war mir dieses Detail nicht bewusst Keck vor 14 Jahren 0
Inhaltstyp, d. H. Nicht DOCTYPE. (Ich bin froh, dass das Detail geschätzt wird. Dies ist immer noch die SU-Betaversion, und so haben viele Anwender von SO und SF, ich schätze, einige würden gerne etwas Hintergrundwissen erfahren.) Arjan vor 14 Jahren 0
Vielen Dank für eine sehr informative und ausführliche Antwort. Ich hatte keine Ahnung, wie die verschiedenen Kodierungsmethoden funktionieren, und es scheint ziemlich interessant zu sein. Zumindest etwas darüber zu lesen. Babu vor 14 Jahren 0