Nucleus

日本語の文字化け

2005年7月7日

 最近、Nucleusをインストールしているサーバが時々忙しそうにしているので何気なくHTTPdのログを見ると、googleのロボットが読みに来ている様子。で、googleでこのサイトを検索にかけてみた。

 検索にはかかるのだが、問題が一つ。googleの検索結果表示画面では、日本語が文字化けしているのである。問題はスキンのヘッダにありと思い、htmlのソースを見てみると、<head>のところで、

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

となっていた。これは問題なので早速

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

に変更したが、これでいいのかな?

 しかしである。HTTPdから送られてくるヘッダでは、次のように記述されている。


HTTP/1.1 200 OK
Date: Fri, 08 Jul 2005 10:29:45 GMT
Server: Apache/1.3.33 (Unix) (Vine/Linux) PHP/5.0.2
X-Powered-By: PHP/5.0.2
Generator: Nucleus CMS v3.2
Set-Cookie: lastVisit=deleted; expires=Thu, 08-Jul-2004 10:29:45 GMT; path=/
Connection: close
Content-Type: text/html; charset=EUC-JP

ここではちゃんと、EUC-JPを指定しているじゃないか。このおかげで、ブラウザで閲覧した場合には文字化けが起こらないのかもしれない。で、HTTPのヘッダでEUC-JPを指定し、HTMLのヘッダでUTF-8を指定するというような食い違いがあった場合にどうなるかということであるが、ブラウザではHTTPのヘッダ情報を優先し、googleはHTMLのヘッダ情報を優先したということなのであろう。いやはや。こういう事は最初にチェックしておくべきだと反省。

 ついでなので、私がwebサイトを持っているベクターのサーバから送られてくるHTTPヘッダも確認してみた。ちなみに、エンコードはShift-JISである。

HTTP/1.1 200 OK
Date: Fri, 08 Jul 2005 11:49:08 GMT
Server: Apache/2.0.54
Last-Modified: Mon, 16 May 2005 13:10:22 GMT
ETag: "44aaff-992-fa6feb80"
Accept-Ranges: bytes
Content-Length: 2450
Connection: close
Content-Type: text/html

ここでは、charsetの指定はしていない。ベクターのような、それぞれのユーザがどのエンコードを用いているか判断できないような場合は、HTTPヘッダでcharsetの指定をしないのであろう。これは、nifty.comでもgeocities.jpでも同様であった。日本のプロバイダではこのような結果であるが、アメリカあたりではどうだろうか?

 geocities.comとtripod.comを調べてみたが、どちらも同じで、HTTPヘッダではcharsetの指定はしていない。やはり、ユーザがどのエンコードを用いるかが分からないため、HTTPヘッダでは指定しないようにしているのであろう。

 日本語のページでHTTPヘッダでもHTMLヘッダでもエンコード形式を指定していない場合に文字化けする事があるようだ。ブラウザはこういった場合、Shift-JISだと判断するようである(Windowsの場合。Macでもおそらく同じ)。Linuxでwebを閲覧した場合だとEUC-JPを選択するのでは無かろうか。いずれにせよ、HTMLヘッダでのエンコード指定はちゃんとしておくべきものだと思った。

コメント

コメントはありません

コメント送信