Auf dieser Webseite http://taj.chass.ncsu.edu/Hindi.Less.05/dialog_script.html zeigen Firefox und Opera, die unter Windows und Linux ausgeführt werden, den Quell-HTML-Code an, der mit Garbage-Zeichen durchsetzt ist (für mich erscheinen sie schwarz) Diamanten mit Fragezeichen), im Gegensatz zu einer gerenderten Webseite.
Von allen Browsern, die ich ausprobiert habe, zeigt nur der Internet Explorer die Seite richtig an. Ich würde die Website sehr gerne mit Firefox unter Linux nutzen. Um zu versuchen, die Seite korrekt anzuzeigen, habe ich versucht, die Zeichencodierung manuell auf jeden verfügbaren Wert einzustellen, aber keinen Erfolg gehabt. Habt ihr noch andere Vorschläge?
Man kann zwar manuell eine Codierung auswählen (und nicht vergessen, diese zu deaktivieren, wenn man eine andere Site besucht), aber die Website sollte sie tatsächlich korrekt angegeben haben. Entweder der Server oder die Webseiten selbst sollten etwas spezifizieren, sonst kann der Browser nur 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 spezifiziert hat, muss man sich die sogenannten Header ansehen . Verwenden Sie den Onlinedienst von web-sniffer.net , um die Header anzuzeigen , die Sie erhalten:
Die letzte Zeile scheint etwas seltsam zu sein: Wie kann der Server behaupten, UTF-8 und UTF-16 zu sein? Der Wert für
charset
sollte einer der bei IANA registrierten Werte sein (z. B. UTF-8 ohne Kommentare). Die Verwendung des Wireshark- Paketsniffers anstelle des Onlinedienstes zeigt jedoch, dass der Text (BOM UTF-16, litte-endian) tatsächlich ein Kommentar des Onlinedienstes ist, der nicht vom Webserver gesendet wird.Also: Der Webserver gibt an, dass er uns ein UTF-8-codiertes HTML-Dokument senden wird.
Das folgende HTML-Dokument ist jedoch falsch (zur besseren Lesbarkeit bearbeitet):
Oben sollte die Zeile, die den Inhaltstyp angibt, die erste sein, die in
<head>
der angezeigt wird, da der Browser sonst nicht weiß, wie Sonderzeichen in der behandelt werden<title>
. Noch wichtiger ist, dass die ersten beiden ungeraden Zeichenÿþ
die Hexadezimalcodes FF und FE sind, die, wie der bereits erwähnte Onlinedienst, die Byte-Ordnungsmarke für UTF-16 (Little Endian) sind.Also: Der Webserver hat versprochen, UTF-8 zu senden, aber dann hat er Markierungen gesendet, die UTF-16 LE anzeigen. Als nächstes wird im HTML-Dokument behauptet, wieder UTF-8 zu verwenden.
In der Tat 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 in
<html>
werden als 12 hexadezimale Bytes gesendet3C 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 zahlreiche numerische Zeichenverweise ( NCRs ), z. B . :Ein Browser zeigt das Obige als as यह्दिल शहर है है an. Aufgrund der Verwendung von NCRs und UTF-16 erfordert das Einzelzeichen य ( 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,य
während die 7 ASCII-Zeichen des NCR selbst mit UTF-16 codiert werden . Wenn Sie keine NCRs verwenden, benötigt dieses einzelne य in UTF-8 3 Bytes (E0 A4 AF
) und in UTF-16 zwei Bytes (09 2F
).Für diese HTML-Quelle bedeutet die Verwendung von UTF-16 eine völlige Verschwendung von Bandbreite, und der Server verwendet auch keine Komprimierung.
quelle