FirefoxはWebページの代わりに文字化けを表示します


0

このWebページhttp://taj.chass.ncsu.edu/Hindi.Less.05/dialog_script.htmlで、WindowsおよびLinuxで実行されているfirefoxおよびoperaは、ごみの文字が散在したソースhtmlを表示します(私にとっては、黒で表示されます)レンダリングされたWebページとは対照的に、疑問符の付いたダイヤモンド)。

私が試したすべてのブラウザのうち、Internet Explorerのみがページを適切に表示します。Linux上で動作するFirefoxでWebサイトを使用できるようになりたいです。ページを適切に表示するために、使用可能なすべての値に文字エンコードを手動で設定しようとしましたが、成功していません。他に何か提案はありますか?

回答:


5

Firefoxでは、使用

「表示」->「文字エンコーディング」->「その他のエンコーディング」->「UTF-16」。

お役に立てば幸いです。

ほとんどのコンピューターテキストはascii8ビットUnicode(UTF-8)としてエンコードされます。

特にUTF-16の詳細については、こちらをご覧ください

一般に、Firefoxで表示される場合は、「インテリジェントな推測」を使用して、文字エンコードを変更してみてください。通常、これは機能しますが、特にlinux firefoxでは、フォントの問題が発生する場合があります。


ありがとう!どのように私はそれを逃したのかまったくわかりません
...-バブ

奇妙なことに、私のSafari(Mac上)はオプションとしてUTF-16をリストしていません。(ただし、明示的にUnicode(UTF-8)を選択した場合でも正常にレンダリングされますが、FirefoxはUTF-8を選択した場合は表示されません。SafariUnicode(UTF-8)では、 、それ以外の場合はBOMを使用してUnicodeエンコーディングを決定します。)
Arjan

4

実際に何らかのエンコードを手動で選択することはできますが(別のサイトにアクセスしたときにそれを無効にすることを忘れないでください)、実際にはWebサイトで正しく指定されているはずです。サーバーまたはWebページ自体のいずれかが何かを指定する必要があります。それ以外の場合、ブラウザーでできることは、何らかの最良の推測を行うことだけです。そしてもちろん、エンコード指定されている場合、HTMLドキュメントは実際にそのエンコードを使用する必要があります。以下に示すように、質問のWebサイトにはそれほど多くありません。

Webサーバーが何かを指定しているかどうかを確認するには、いわゆるheadersを調べる必要があります。web-sniffer.netのオンラインサービスを使用して、取得するヘッダーを明らかにします。

HTTP / 1.1 200 OK

日付:月、2009年8月17日17:47:03 GMT   
サーバー:Apache  
最終更新日:月、2006年11月27日23:38:49 GMT   
ETag: "758b0606-1a316-4234309151440"  
Accept-Ranges:バイト   
コンテンツの長さ:107286  
接続:閉じる   
コンテンツタイプ:text / html; charset = utf-8(BOM UTF-16、リッテエンディアン)

最後の行は少し奇妙に思えます:サーバーがUTF-8とUTF-16の両方であると主張する方法は?の値は、IANAに登録されcharsetいるものの1つである必要があります(たとえば、コメントなしのUTF-8)。ただし、オンラインサービスではなくWiresharkパケットスニッファーを使用すると、テキスト(BOM UTF-16、リッテエンディアン)は実際にはWebサーバーから送信されたものではなく、オンラインサービスからのコメントであることがわかります。

そのため、Webサーバーは、UTF-8でエンコードされたHTMLドキュメントを送信すると主張しています。

ただし、次のHTMLドキュメントは間違っています(読みやすいように編集されています)。

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

上記では、コンテンツタイプを指定する行が内で最初に表示されます。<head>そうしないと、ブラウザは内の特殊文字の処理方法を認識できません<title>。さらに重要なのは、最初の2つの奇数文字、ÿþ実際には16進コードFFおよびFEであり、既に説明したオンラインサービスと同様に、UTF-16(リッテエンディアン)のバイトオーダーマークです。

そのため、WebサーバーはUTF-8を送信することを約束しましたが、その後、UTF-16 LEを示すマーカーを送信しました。次に、HTMLドキュメントでは、再びUTF-8を使用していると主張しています。

実際、Wiresharkは、実際のHTMLドキュメントがUTF-16エンコードされていることを示しています。これは、すべての文字が少なくとも2バイト(オクテット)を使用して送信されることを意味します。の6文字の<html>ように、12個の16進バイトとして送信されます3C 00 68 00 74 00 6D 00 6C 00 3E 00。ただし、この非常にWebサイトは、非ASCII文字をまったく使用していないように見えるため、プレーンASCIIである可能性が非常に高くなります。代わりに、HTMLソースは次のような数字参照(NCR)でいっぱいです。

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

ブラウザには、上記のように表示されます。ただし、NCRとUTF-16を使用するため、単一文字usingUnicode U + 092F)は、26 00 23 00 32 00 33 00 35 00 31 00 3B 00NCR &#2351;を使用して書き込まれ、NCR の7つのASCII文字はUTF-16を使用してエンコードされるため、で最大 14バイト。NCRを使用しない場合、UTF-8ではこの単一のに3バイト(E0 A4 AF)、UTF-16では2バイト(09 2F)が必要です。

このHTMLソースでは、UTF-16を使用すると帯域幅が無駄に消費され、サーバーも圧縮を使用しません。


すばらしい答えであり、非常に徹底的です。DOCTYPEの詳細を知りませんでした
ケック

Content-Type、つまりDOCTYPEではありません。(喜んで詳細に感謝します。これはまだSUベータ版であり、SOとSFから多くのユーザーがいるため、少なくとも一部の人は何らかの背景を知りたいと思います。)
Arjan

非常に有益で徹底的な答えをありがとう。さまざまなエンコード方法がどのように機能するかを理解していなかったため、かなり興味深いようです。少なくとも読んでおくべきことです。
バブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.