In order to portably present documents with specific character encodings, the best approach is to ensure that the web server provides the correct headers. If this is not possible, a document that wants to set its character encoding explicitly must include both the XML declaration an encoding declaration and a meta http-equiv statement.
The "charset" parameter is used with some media types to define the character set (section 3.4) of the data. When no explicit charset parameter is provided by the sender, media subtypes of the "text" type are defined to have a default charset value of "ISO-8859-1" when received via HTTP. Data in character sets other than "ISO-8859-1" or its subsets MUST be labeled with an appropriate charset value. See section 3.4.1 for compatibility problems.
The HTTP protocol ([RFC2616] [w3.org], section 3.7.1) mentions ISO-8859-1 as a default character encoding when the "charset" parameter is absent from the "Content-Type" header field. In practice, this recommendation has proved useless because some servers don't allow a "charset" parameter to be sent, and others may not be configured to send the parameter. Therefore, user agents must not assume any default value for the "charset" parameter.
HTTP応答ヘッダー (スコア:1)
* 今までいい加減に済ませていたHTTP応答ヘッダーのツケが出てきた。
* 今まで勝手に中身を判断する悪しき挙動に身を染めていたIEがまっとうになろうとして失敗した。
と、いうあたりだろうな。
AddType "text/html; charset=iso-2022-jp" .html (スコア:2)
こんなのを適当な場所に書いとけば良いのですね。
Re: (スコア:0)
でいいよ。HTML以外にも適用されるし(むしろmetaタグで指定できないHTML以外のほうが必要性が高い)。
ISO-2022-JPじゃないリソースもあるなら、個別に<Files>…</Files>等で指定を上書きする。
Re:HTTP応答ヘッダー (スコア:1)
もっとも、jpnicやjprsのサイトでさえ、きっちりとしたHTTP応答ヘッダーにcharset付けてないので絶望的とも言えるな。
Re: (スコア:0)
<meta>で入ってればだいたいOKですね。
たまにヘッダの記載と現物が違ってるとかいう行儀悪いサイトもありますけどそれは論外。
こんな文字化けは今まで他ブラウザでも散見されてきたものです。IEの自動判別は比較的優秀な方だったというのもあります。
とにもかくにもサイト側がしっかりしてくれないことには始まらないですよね。MSもよく化けるぞコンチキショーの文句はサイト側に言ってくださいと宣言しちゃえばいいんですが。
Re:HTTP応答ヘッダー (スコア:1)
もちろん、わざわざ文字エンコーディングと一致してないcharsetを<meta>で指定するのはよろしうない。
Re:HTTP応答ヘッダー (スコア:1)
html自体をどう読むかを示すcharset指定を、htmlの中で行うってのもおかしな話だよね。
幸いにして、大体の文字コードはASCII互換、非互換のものでもASCIIで読んだら間違ったmetaタグに解釈されるってことは現実的にはないので、それでうまくいってるようだけど。
1を聞いて0を知れ!
IEでUTF-8が表示できない例 (スコア:1)
最近、自サイトでの出来事。
↑charset指定より上に日本語があると、真っ白なページになってしまう。IE限定。
↓の様に修正すると解決。
昨日まで知らなかった。これは有名(というか当然)な現象なのでしょうか?
IEだけが表示できなくて、それ以外のブラウザでは問題なしで、いままでIEがバカなんだとばかり思っていました。
Re:IEでUTF-8が表示できない例 (スコア:1)
エンコーディングを指定する部分を該当エンコーディングに依存する (非 ASCII となる) 部分より先に書いたら符号方式が未確定であるため自動判定となり、本来の目的である http-equiv (HTTP 応答ヘッダーの補完) の意味を為していないこととなります、記述順序的にはメタ情報として http-equiv を記述する場合は head 要素の先頭に配置し、そこまでの部分では ASCII の範囲内で記述する、というのが基本です。
今まではたまたま判定に成功していた、というだけでしょう。
余談ながら、head 要素の profile 属性に URI を指定することができますが、こうした場合に IDN をそのまま記述すると残念な事となるため、ASCII の範囲で記述しようとすると punycode で記述する事となります。
このため、ローカルシステム上で確認する場合ではしょうがないですが、できれば Web サーバー側から適切な応答を出させた方が記述上も楽でしょうね。
profile が指定されている head 要素なんてまず存在しないというのはありますが、先日 Google が提唱していた引用元明示のためのメタ情報拡張 [google.com]などは、HTML の仕様上はこれを指定するものだったりします。
Re: (スコア:0)
判別に失敗するのはともかく、真っ白になるのは「ル」の3バイト目と「<」をシフトJISの1文字とみなして、HTMLの末尾まで終了タグが見つからないと解釈してしまうから。
これはうまく使うとXSSになるはずだけど、欧米人にはあまり関係ないせいか(判別を誤ってもデフォルトが1バイトエンコーディングなら真っ白にはならない)ずーっと放置されてる。
Re: (スコア:0)
最近のブラウザが優秀だったのでしょうね。
Re: (スコア:0)
IEって、HTTPレスポンスやMETAタグのcharsetと実際の文字コードが異なると、実際の文字コードにあわせるみたいですね。
firefoxとかだとcharset指定に合わせるから文字化けを起こす。
Web開発側の視点だと後者の方がコード間違いが検出できるからいいんだけど、ユーザー視点だと
IEだとちゃんと表示できる→IE以外だと文字化け→ブラウザが悪い
ってなっちゃうんだよなぁ。
# Web開発で文字コードは悩みのタネです。
# プロジェクトに参画して、「文字コードはどうするんですか?」と聞くと「何それ?」と返された事が過去何度も。
Re: (スコア:0)
METAタグでおkとか思っちゃう奴はJISがハブられた理由を理解していない
Re:HTTP応答ヘッダー (スコア:1)
ちょっと調べてみたんですが、今回のトラブルはXHTMLでXML宣言にencodingを明示していても文字化けが起きますね。
W3CのXHTML 1.0(Second Edition) / C.9. Character Encoding [w3.org]だと、
とありますから、HTTPヘッダでcharsetが明示されないとき、XML宣言とmeta http-equivの両方でISO-2022-JPを指定してあっても文字化けするのは、IEの不具合じゃないかな、と。
Re: (スコア:0)
The "charset" parameter is used with some media types to define the
character set (section 3.4) of the data. When no explicit charset
parameter is provided by the sender, media subtypes of the "text"
type are defined to have a default charset value of "ISO-8859-1" when
received via HTTP. Data in character sets other than "ISO-8859-1" or
its subsets MUST be labeled with an appropriate charset value. See
section 3.4.1 for compatibility problems.
専用のサーバーならともかくこの要求無理だろ
Re:HTTP応答ヘッダー (スコア:2)
しかし一方でHTML4.01のSpecifying the character encoding [w3.org]ではこう書かれています。
つまり、charsetが省略されていた場合は、ユーザエージェントはデフォルト値を仮定してはならない(MUST NOT。HTML 4.01ではMUST NOT等は小文字で表記すると規定されている)としています。
Re: (スコア:0)
「専用のサーバー」って、何を指してるか不明だが、Apacheで .htaccess とかで許可されてれば全然難しいことではない。
知ってるか、気にしてるか、やる気があるか、のレベルの問題。
Re: (スコア:0)
許可していないレンタルサーバが蔓延してるけどね。
Re: (スコア:0)
.htaccessいじれません、勝手に特定のcharsetでヘッダを送ります。そんな仕様のところもあるんですよね。
そもそもサーバーサイドでcgiとかごにょごにょできない、単なるホームページスペースかもしれません。
んなん文句言って引っ越せ!となるけれど。個人用途でないといろいろと手続きがねぇ
# 日本のgeocitiesのeuc-jp固定は結構有名でした