Revised: 19th/Dec./2004; Since: 29th/May/2002
文字化けは、ブラウザが文字符号化方法を誤って解釈するために発生します。日本語の文字セットには、次のような種類があります。
| 俗称 | 文字コード名 | 専ら使われる場所 |
|---|---|---|
| シフトJIS | Shift_JIS | Windows, Macintosh など |
| JIS | ISO-2022-JP | 電子メールなど |
| EUC-JP | EUC-JP | UNIX |
| Unicode | UTF-16, UTF-8 | 普及中。推奨。 |
本稿では、 Shift_JIS の利用を前提として、サンプルソースを掲載します。Windows などで、特に指定しない限りは Shift_JIS になっているはずです。多くのテキストエディタでは、保存時に文字コードが選べます。他の文字コードを利用する場合は、ソースコードを適宜書き換えてください。
例えば、テキストエディタでの保存時に、UTF-16を選ぶ場合、次のようにします。
<?xml version="1.0" encoding="UTF-16" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-16" /> <title>はじめての XHTML 1.0</title> </head> <body> <p>こんにちは、 XHTML 1.0!</p> </body> </html>
上の例では、文字コードの情報を書き換える箇所は 2 箇所です。他の文字コードの場合も、適宜これに習って書き換えてください。 HTML 文書の側で、使っている文字セットを明示しておけば、ブラウザが解釈し間違ることがなくなり、文字化けの発生がなくなります。
本稿では、Content-type を、head 要素中の meta http-equiv 要素で記述しました。
meta 要素による Content-type の指定は、文字化け発生回避の簡便な手法ですが、本来的には、HTTP GET リクエストに対する MIME ヘッダに含まれているべきです。サーバが Apache の場合は、ディレクトリに .htaccess というファイルを作成し、次の一文を含めます。当該ディレクトリとそのサブディレクトリに含まれる *.html ファイルの Content-type ヘッダが "application/xhtml+xml; charset=Shift_JIS" になります。[参考1, 参考2]
AddType "application/xhtml+xml; charset=Shift_JIS" html
Apache 以外のサーバで公開する場合は、ここに挙げたように、meta 要素で記述することもできます。そのファイルの文字セットを記述するので、そのファイル内で日本語が現れるよりも先に記述してください。 head 要素の開始タグの直後が良いでしょう。
Content-type で指定する text/html のことを、メディアタイプと呼びます。
text/html です。text/html か application/xhtml+xml が推奨されます。application/xhtml+xml が推奨され、text/html は推奨されません。XHTML では、文書のメディアタイプの指定を、"application/xhtml+xml" とするように推奨されています。HTML は "text/html" であり、ほかの値は不可です (MUST NOT)。XML 応用言語である XHTML 1.0 は "application/xhtml+xml" を指定すべき (SHOULD) ですが、HTML との互換言語でもあるので "text/html" も指定可能です。XHTML 1.1 では "text/html" を指定すべきでありません (SHOULD NOT)。
また、"application/xhtml+xml" である文書には、meta http-equiv を指定すべきでない (SHOULD NOT) とされています。このとき、文字符号化方法は、XML 宣言の encoding 属性でのみ記述されます。
| メディア型 | HTML 4 | XHTML 1.0 | XHTML 1.1 | XHTML Basic / 1.1 | XHTML+MathML |
|---|---|---|---|---|---|
text/html | 推奨 | 可能 | 非推奨 | 非推奨 | 非推奨 |
application/xhtml+xml | 禁止 | 推奨 | 推奨 | 推奨 | 推奨 |
application/xml | 禁止 | 可能 | 可能 | 可能 | 可能 |
text/xml | 禁止 | 可能 | 可能 | 可能 | 可能 |