12

Content-Type ヘッダーに charset パラメータが指定されていない場合、RFC2616 セクション 3.7.1は、サブタイプ「テキスト」のメディア タイプに対して ISO8859-1 を想定する必要があることを暗示しているようです。

明示的な文字セット パラメータが送信者によって提供されない場合、「テキスト」タイプのメディア サブタイプは、HTTP 経由で受信したときにデフォルトの文字セット値「ISO-8859-1」を持つように定義されます。

「ISO-8859-1」またはそのサブセット以外の文字セットのデータは、適切な文字セット値でラベル付けする必要があります。

ただし、「application/x-javascript」のような Content-Type 値 (つまり、charset パラメータなし) を持つ Javascript ファイルを提供するアプリケーションを日常的に目にします。これらのスクリプトに非 ASCII UTF-8 文字が含まれている場合でも、解釈されると破損します。 ISO8859-1として。

これにより、クライアントに問題が発生することはないようです。クライアントはバイトを UTF-8 として解釈することをどのように認識しますか? UTF-8 がデフォルトであることを意味する他の文字データ サブタイプのルールはありますか? これはどこに文書化されていますか?

4

6 に答える 6

15

私がチェックしたすべての主要なブラウザー (IE、FF、Opera)は、この部分の RFC 仕様を完全に無視しています。

データによって文字セットを自動検出するアルゴリズムに興味がある場合は、Mozilla Firefoxリンクを参照してください。

コンテンツ タイプに関するちょっとした注意:テキストのみに文字セットがあります。ブラウザーが application/x-javascript を text/javascript を処理するのと同じように処理すると想定するのは合理的です (IE6 を除きますが、それは別の主題です)。

次のように、 Internet Explorerはデフォルトの文字セット (おそらくレジストリに保存されている) を使用します。

デフォルトでは、Internet Explorer は、サーバーから返された HTTP コンテンツ タイプで指定された文字セットを使用して、この変換を決定します。このパラメータが指定されていない場合、Internet Explorer はドキュメントの meta 要素で指定された文字セットを使用します。meta 要素が指定されていない場合は、ユーザーの設定が使用されます。

ソース: http://msdn.microsoft.com/en-us/library/ms537500%28VS.85%29.aspx

ここで指摘されているように、 Mozilla Firefoxは文字セットの自動検出を試みます。

この論文では、明示的な文字セット宣言なしでドキュメントのエンコーディングを決定するための 3 種類の自動検出方法を紹介します。

ソース: http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html

文書化されているように、 Operaも自動検出を使用します。

トランスポート プロトコルがエンコーディング名を提供する場合は、それが使用されます。そうでない場合、Opera は文字セット宣言のページを調べます。これが見つからない場合、Opera はドメイン名を使用してスクリプトが CJK スクリプトであるかどうか、またその場合はどのスクリプトであるかを確認し、encoding を自動検出しようとします。Opera は UTF-8 を自動検出することもできます。

ソース: http://www.opera.com/docs/specs/opera9/

于 2010-02-27T22:47:11.380 に答える
2

RFC 4329で説明されapplication/javascriptているように、パラメーターを持つこともできcharsetます。もう 1 つの問題は、ブラウザーの実装の取り扱いです。申し訳ありませんが、テストされていません。

于 2010-02-28T23:13:40.727 に答える
1

RFC 4329は、「application/javascript」メディア タイプを、「text/javascript」、「application/x-javascript」、およびその他の同様のタイプの代替として定義しています。セクション 4.2 では、明示的な「charset」パラメーターが使用できず、データの先頭に Unicode BOM が存在しない場合に、デフォルトの文字エンコードを UTF-8 に設定します。

于 2010-03-05T02:47:11.580 に答える
0

これは XMLHttpRequest にとっては少し特殊で、ここで説明されています: http://www.w3.org/TR/XMLHttpRequest/

于 2010-02-24T12:27:48.510 に答える
0

明らかなことを指摘すると、「application/x-javascript」は「text」のサブタイプではありません。

また、RFC 2616 のテキストは古くなっています。HTTP/1.1 の次のリビジョンでは、デフォルトは定義されません。詳細については、RFC 6657 を参照してください。

于 2010-02-24T13:27:49.483 に答える