web-dev-qa-db-ja.com

IE UTF-8エンコードされたテキストを表示できないのはなぜですか?

Kenticoを使用したWebサイトに表示しようとしている中国語の文字があります。このテキストはKenticos FCKエディターにコピー/貼り付けされ、保存されてサイトに表示されます。 Firefox、Chrome、およびSafariでは、文字は予想どおりに表示されます。 IE 8 Standardsモードでは、ボックスのみが表示されます。

テキストはUTF-8でエンコードされており、私が知る限り、サーバーからの応答で正しくエンコードされています。ページにはContent-Type: text/html; charset=utf-8応答ヘッダーと<meta http-equiv="content-type" content="text/html; charset=UTF-8" />メタタグもあります。サーバーからHTMLをダウンロードし、問題の文字のバイトを元のUTF-8テキストドキュメントと比較すると、HTMLにBOMが含まれていないことを除いて、すべてのバイトが一致します。

これは、標準モードのIE 8に固有のようです。 IE 8 Quriks:動作します。 IE 7標準:機能します。 IE 7癖:動作します。標準モードがこの問題をどのように引き起こすかはわかりません。

奇妙なことに、IEからソースを表示すると、文字がソースビューに正しく表示されます。

ここで何が間違っているのでしょうか?明らかな何かが欠けていますか?

27
mrdrbob

これについて詳しく説明することはできません。しかし、これは確かに既知の問題です。

次に、再現可能な小さなコードスニペットを示します。

<!DOCTYPE html>
<html lang="en">
    <head><title>test</title></head>
    <body><p>&#65185;<br>0 0</p></body>
</html>

UTF-8で保存し、IE8で表示します。何も見えません。置換0 0 沿って 00そしてページをリロードします。それはうまくいくでしょう!これは本当に驚くべきことです。奇妙なことに、0 0 沿って a a または <br>によって</p><p>も修正します。空白のレンダリングの失敗と関係があります。

申し訳ありませんが、これを証明する正式なリソースはありませんが、これはIE8が期待どおりに優れていないことのもう1つの証拠です。最善の方法は、HTMLを変更するか段階的にビルドして、ある時点で機能するようにするか、無駄になったときに、次のメタタグをヘッドに追加してIE8をIE7モードに強制することです。

<meta http-equiv="X-UA-Compatible" content="IE=7" />
11
BalusC

デフォルトのIEエンコーディングは西ヨーロッパ(ISO)であるため、UTF-8に手動で変更するか、IEを使用して次のようなエンコーディングを使用する必要があります。

  • HTML 4.01

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

  • HTML 5

    <meta charset="UTF-8">

また、<html>タグでlang属性を使用して言語を宣言する必要もあります。

    <html lang="zh">

中国語用

8
Cassian

ただの推測ですが、フォントの問題かもしれません。ブラウザで使用可能なフォントは、前述の漢字を表すことができます。

3
troelskn

ファイルのUTF形式を「UTF8 With Byte Order Mark」に変更することで、同じ問題を解決できました。

(私が使用しているエディターでは、ファイル形式を簡単に切り替えることができます。他の方法はわかりませんが、異なるUTFファイル形式を見る価値があります、IE(8)はバイトオーダーマークなしのUTF8が好きではありません...)

上記の回答からスニペットを再現することもできました。

<!DOCTYPE html>
<html lang="en">
    <head><title>test</title></head>
    <body><p>&#65185;<br>0 0</p></body>
</html>

しかし、私の結果はUTF-Without BOMで「断続的」でした(アクセントが表示されることもあれば、奇妙な文字が表示されることもあり、ホワイトスペースのレンダリングの問題のようには見えませんでした...) lang = "fr"およびlang = "es"ですが、すべての場合において、UTFファイル形式を変更すると、アクセント表示の問題が永続的に解決されたようです。 :)

私はUTFに100%精通していませんが、文字が2バイトを使用してコード化されている場合、空白の問題と誤解された文字がソースのバイトのずれに関連している可能性があると仮定する必要があります。

2
Selt

これは、出力に雪だるまキャラクターを追加するRails3を引き起こしたのと同じ種類の可能性があります: RubyonRails3つのフォーム?

0
Jon Smock