HTMLソースの文字コードの違い

日本語WEBサイトの文字コードには、Shift_JIS、EUC-JP、*ISO-2022-JPおよびUTF-8などが使用されています。 Yahoo!JAPANの提供する無料WEBサイトサービス、ジオシティーズで、Yahoo!側が用意したツールを使ってWEBページを作成すると、文字コードはEUC-JPになります。 良く分からないまま、WEBページ中に、

<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">

と指定して、文字化けに悩む人もいます。そこで、HTMLソースの文字コード指定の基本についてまとめて見ました。

*ISO-2022-JPは「JIS」と記述されることが有りますが、用語の使い方としては正確ではありません。


EUC-JPとShift_JIS

下のリンク先をクリックすると、文字コードがEUC-JPとShift_JISのページにそれぞれ遷移します。(UTF-8のテストページ追加)

  1. 文字コードをEUC-JPにして作成したページ
  2. 文字コードをShift_JISにして作成したページ
  3. 文字コードをUTF-8(BOM有り)にして作成したページ
  4. 文字コードをUTF-8(BOM無し)にして作成したページ

両方ともこのように表示するはずです。画面表示例

WEBブラウザで表示させると、同じに表示しますが、ソースを見ると違いがあります。 インターネットエクスプローラー(IE)のソースエディタは通常「メモ帳」なっていいます。 そのためEUC-JPの方のソースを表示させると漢字部分が文字化けするので、 Mozilla Firefoxで閲覧してソース表示した画像を掲示しておきます。

HTMLソース

二つのソースは、"charset=shift_jis"、"charset=euc-jp"の箇所のみ違っています。

(ただし、画面では見えませんが、euc-jpの方は">"の後に本来不要な半角スペースがあります。これは「shift_jis」のソースと文字数を合わせるためにわざと挿入しています。)

WEBサイトにアップロードする前の元のソースをバイナリエディターで16進数表示させてみます。

文字コードをShift_JISにして作成したソース

文字コードをEUC-JPにして作成したソース

"charset=shift_jis"、"charset=euc-jp"の箇所以外にも、漢字(全角文字)の部分が異なっています。

(バイナリエディターにはBzを使用しました。文字コードの設定は、それぞれ、Shift_JISが「表示」−「文字コード」−「シフトJIS」を、EUC-JPが「表示」−「文字コード」−「EUC」を選択しています。)

"charset="の使い方

Shift_JISコードとEUC-JPコードでは、半角英数字は同じですが、漢字(全角文字)と半角カタカナは16進数表記では別のコードになっています。*

従ってソースを記述した文字コードとHTMLソース中で指定する文字コードを合わせないと、文字化けします。

具体的には、ジオシティーズのツールを使ってHTMLソースを作成した場合は、

<meta http-equiv="Content-type" content="text/html; charset=EUC-JP">

と、Shift_JISコードで作成したHTMLソースを、「EZアップロード」やその他のアップロードツールでアップロードする場合は、

<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">

と指定しなければなりません。

「EZアップロード」などでアップロードしたHTMLソースも、アップロード後にジオシティーズのツールアドバンストHTMLエディターを使って編集・保存すれば、文字コードがEUC-JPに変わってしまいます、その場合は、"Shift_JIS"の部分を"EUC-JP"に変更する必要があります。混乱を避けるためにも編集方法を統一した方が無難でしょう。

(ジオクリエイターを使用した場合は元の文字コードを引き継ぎます。 ただし、ジオクリエイターは一部の文字を文字実体参照(参考サイト:実体参照符号)に変更します。 特に問題は起こらないと思いますが、留意してください。(2006/10/11追記))

*UTF-8,ISO-2022-JPも半角英数字は同じです。半角英記号はほぼ同じですが、一部"~"(チルダ)などの表示が異なる場合があります。 またISO-2022-JPには半角カタカナは規定されていません。


参考:WEBブラウザの文字コード確認方法

WEBブラウザは閲覧するWEBページがどのような文字コードで記述されているのか、どうやって判別しているのでしょうか?

WEBブラウザとWEBサイトは、WEBブラウザが表示する情報以外の制御情報もやり取りしています。WEBブラウザからWEBサイトへ送る要求情報は、HTTPリクエストヘッダー、WEBサイトからWEBブラウザへ返ってくる応答情報をHTTPレスポンスヘッダーと言います。

(1)そのページが使用している文字コード情報を、WEBサイトが、HTTPレスポンスヘッダーの中に含めて送って来れば、WEBブラウザはそれを見てそのページの文字コードを判別します。これが一番確実な判定方法です。

詳しくは、レスポンスヘッダでの文字コード指定(外部サイトへのリンク)をお読みください。

しかし、ジオシティーズのようにWEBサイトのスペースをユーザーが借りている場合、HTTPレスポンスヘッダーの中に文字コードの指定を入れるのは出来ない場合が多いです。

(2)その場合は、

<meta http-equiv="Content-type" content="text/html; charset=文字コードの指定">

というように文字コード指定をHTMLのMETA文で行います。

もちろん(1)(2)ともHTML文で使用している文字コードと異なった物を指定してはいけません。また、(2)の指定は最初に全角文字が現れる前に行わなくてはいけません。良く、

<title>漢字のタイトル</title>
<meta http-equiv="Content-type" content="text/html; charset=文字コードの指定">


としているサイトがありますが、意味がありません。

(3)META文による指定が無い、または有ってもそれより先に漢字(全角文字)が出てくる場合は、WEBブラウザはその全角文字で文字コードの判別を行います。

Yahoo!掲示板のページのソースを見てみるとMETA文による文字コード指定は無く、代わりに、

<html>
<head>
<!--・-->


と書いてあります(IEでYahoo!掲示板のHTMLソース表示させると文字化けします)。

この「・」でWEBブラウザに文字コードの判定をさせたいのでしょうが、どうなんでしょうか。Yahoo!掲示板を閲覧すると WEBブラウザがエンコードの判定をミスって文字化けすることが多いのも、このためではないかと私は思っています。

(2006/10/7)

UTF-8(BOM無し)でギリシャ文字を表示


「レジにて半額」Yahoo!出張所に戻る