いいえ、HTML内からはできません。サーバーの応答ヘッダーは、ドキュメントのメタタグよりも優先されます。5.2.2文字エンコーディングの指定-HTML 4.01仕様で指定されているとおり:
要約すると、適合ユーザーエージェントは、ドキュメントの文字エンコーディングを決定する際に(最高の優先度から最低の優先度まで)次の優先度を順守する必要があります。
- 「Content-Type」フィールドのHTTP「charset」パラメーター。
- 「http-equiv」が「Content-Type」に設定され、値が「charset」に設定されたMETA宣言。
- 外部リソースを指定する要素に設定された文字セット属性。
したがって、これにはサーバー側での構成が必要です。ただし、章が続くと:
ユーザーエージェントは、ユーザーが誤った「charset」情報を上書きできるメカニズムを提供する場合があります。ただし、ユーザーエージェントがこのようなメカニズムを提供する場合、不正な「charset」パラメーターでマークされたWebページの作成を回避するために、ブラウジングのためだけに提供し、編集のために提供するべきではありません。
私の場合、サーバーのContent-Typeヘッダーには正しいMIMEタイプが含まれていますが、間違った文字セットが含まれています。
結局のところ、私のApache httpd構成はAddDefaultCharset
、; charset=ISO-8859-1
パーツを追加することをオンに設定していました。.htaccess
次の行をWebサイトのルートディレクトリに配置します。
AddDefaultCharset Off
文字セット情報が削除されました:
$ curl -I http://example.com/file.html
HTTP/1.1 200 OK
Date: Fri, 19 Oct 2012 15:07:52 GMT
...
Content-Type: text/html
(最後の行を参照、; charset=...
一部なし)。これをhtmlメタタグと組み合わせると、前述のブラウザーヒューリスティックがトリガーされ、メタタグから文字セットが引き継がれます。ウェブサイトは適切にデコードされています。
テスト済み:
- Google Chrome v。22.0.1229.94
- Firefox v。16.0.1
- Lynxバージョン2.8.7rel.1(2009年7月5日)
これらの3つのブラウザーは、元の構成に問題があり、現在は機能しています(すべてFedora 17で)。
- Opera 12.02
- Internet Explorer 6(Win XP SP3)
そもそも問題はなかった。どちらもサーバーからのISO-8859-1設定よりもメタタグからのUTF-8を優先していました。
UTF-8をサポートしていないため、サーバーの設定やメタタグに関係なく、常にWestern(Latin1)を選択します。