2017-03-07 1 views
0

したがって、コンテンツを返すHTTPヘッダーに従ってISO-8859でエンコードされたWebページがあります。私はテキストコンテンツを返し、期待どおりにISOエンコーディングによってマングルされます。ISO-8859で正しく表示されたAJAX UTF-8コンテンツエンコードされたページ

しかし、同じテキストコンテンツを返すJSONP AJAX呼び出しを作成してページに挿入すると、これらの顔文字が正しく表示されます。特に、Content-Typeヘッダーはtext/javascriptなので、AJAX呼び出しではエンコーディングタイプのヘッダーが欠けています。

ここでは何が起こっていますか?私のChromeブラウザは、AJAXコンテンツが正しく表示されるようにするために何らかの巧妙なやり方をしていますか?

重要な場合は、jQueryライブラリを使用してAJAX呼び出しを行います。

+0

デフォルトでは、jQuery Ajaxは、http://のコンテンツタイプcharsetがUTF-8 ... contentType(デフォルト: 'application/x-www-form-urlencoded; charset = UTF-8')に設定されている可能性があります。 api.jquery.com/jquery.ajax/ –

+0

@VipinDubeyリクエストヘッダーはこれと何が関係していますか? – thatidiotguy

+0

ブラウザでは、ISO-8859を既に持っているので、ファイルが同じフォーマットで保存されているかどうかを確認したり、メモ帳でファイルを開いたりして、ページに文字セットが定義されていないときはUTF-8を使用します。 file asで保存し、ISO-8859またはUTF-8ファイル形式であるかどうかを確認します。 jQuery Ajaxは、明示的に定義するまでは、UTF-8で応答を送信し続けます。 –

答えて

1

これは大部分を見ていないので、ほとんどの推測ですが、ブラウザがHTMLのテキストコンテンツを内部表現(おそらくUTF-16、わかりません)に変換することがわかっています。私はそれの言及を見つけたhere

サーバー(Content-Typeヘッダー)、HTML自体(<meta charset=...など)、またはユーザー(ページのエンコードを明示的に設定することによって)が提供する手がかりを使用します。

任意新しい DOMにプッシュされるテキストコンテンツ(AJAX要求を使用して取得されるテキストコンテンツなど)は、同じトランスコードを受けます。言い換えれば、ブラウザはページの残りの部分のエンコーディングを使用しません(または、おそらくエンコーディングがわからない場合にのみ)が、AJAXレスポンスでサーバーによって提供されるエンコーディングを使用します(またはサーバーが設定していない場合はデフォルトを使用します)。

内部的にすべてが同じエンコードに変換されるため、ISO-8859エンコードされたページにJSを使用してUTF-8エンコードされたデータを注入することができます。

+0

あなたの意見をサポートしていると思われる見積もりを提供できますか?私はリンクされたMozillaドキュメントのいくつかのセクションを読んで、私はそれがデフォルトとしてUTF-8を使用しているという表示を見ませんでした。 – thatidiotguy

+0

@thatidiotguy JSONのデフォルトのエンコーディングはUTF-8です([RFC4627](https://www.ietf.org/rfc/rfc4627.txt))、それはどういう意味ですか?私は、ブラウザが明らかにテキストを内部表現に変換することを示すためのリンクを追加しました(ただし、それが何を基にしているかはわかりません)。 – robertklep

+0

いいえ、私は、この内部表現がUTF-8であることを示唆するリンクには何も具体的なものがないと言います。ブラウザが実際にDOMの異なる部分を異なるエンコーディングで表示していると思いますか? – thatidiotguy

関連する問題