文字コードとエンコード

■ 文字コードとエンコード ■

こんにちは。tanzan です。

今回からまぐまぐに加え、melma! での配信も開始しました。melma! で読まれている方、はじめまして。

melma! での発行に伴い、メルマガのタイトルを「アフィリエイトのノウハウ」に変更しました。以前は「商品情報」でしたが、最近はほとんど特定の商品は紹介しませんので、実態にタイトルを合わせました。

久しぶりに Google の「ウェブマスター向けヘルプ センター」を見ていたら、次のようなページがありました。
http://www.google.com/support/webmasters/bin/answer.py?answer=66361

Google が嫌いなサイトとして「オリジナルのコンテンツがほとんどまたはまったく存在しない」サイトが挙げられており、さらにその中には、

「実質のないアフィリエイト サイト」

という項目があります。つまり、オリジナルのコンテンツがない、商品情報やアフィリエイトリンクばかりからなるサイトは Google に嫌われる、と明記しているわけですね。

これでは昔作った商品リンクしかないサイトが Google で全く検索にかからなくなっても当然ですね。

広告がほとんどのサイトは、Google のページランクまで消えてしまっていますから、相当嫌われているようです。

DoCoMo携帯のブラウザーは REFERER 情報を使えないんですね。

え?何のことやらさっぱりわからない?

REFERER というのはアクセス解析のときに使われる情報で、「どこのページから来ました」というのを伝えるものです。

アクセス解析のプログラムはこの REFERER 情報を見て「ふむふむ、Yahoo! から来たのね。キーワードは…なるほど、これね。」というように解析しています。

僕の使っている市販のアクセス解析ソフトは性能は高いのですが、JavaScript を使用しているので、携帯を使った訪問者は記録に残りません。そこで、インターフェース部分を自分でPHPで作って使ってみたのです。

これでどのページにどれくらいの訪問者があるかはわかったのですが、肝心のリンク元の情報やキーワード情報が残っていません。「もしや」と思って、ネットで検索して調べてみたら、DoCoMo 携帯は元々の仕様で REFERER 情報を渡してくれないことがわかったのです。

まあ、訪問者数だけでもわからないよりは良いですが…。

さて今日は、文字コードと、エンコードの話を書きます。少し技術的な内容ですが、覚えておくと検索結果へのリンクなどを作るときに役立つ場合があります。

まず yahoo! で「浴衣」を検索してみてください。そしてURLを見てください。以下です。Firefox などの一部のブラウザーだと表示が異なりますので、Internet Explorer で試してみてください。

http://search.yahoo.co.jp/search?fr=slv1-fftbtop&p=%CD%E1%B0%E1

この中に「%CD%E1%B0%E1」という部分があります。

今度は楽天市場だと、

http://esearch.rakuten.co.jp/rms/sd/esearch/vc?sv=2&sitem=%cd%e1%b0%e1&p=0

「%cd%e1%b0%e1」の部分。小文字になっていますが、yahoo!と同じですね。

ライブドアデパートだと

http://depart.livedoor.com/search/?c=&word=%CD%E1%B0%E1&x=58&y=17&o=0&l=20&v=2&t=1&mode=1

やはり「%CD%E1%B0%E1」がありますね。

これが Google だと

http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLJ,GGLJ:2006-35,GGLJ:ja&q=%e6%b5%b4%e8%a1%a3

「%e6%b5%b4%e8%a1%a3」という部分があります。Yahoo! のURLとは違います。

ではセシールで「浴衣」を検索してみましょう。以下です。

http://www.cecile.co.jp/Page/CmdtyInfo/Search/Result.aspx?b=%97%81%88%DF&x=0&y=0&j=1&k=1&l=3

今度は「%97%81%88%DF」という部分があります。これはまた違います。

でもこれらはすべて「浴衣」を表現しています。逆に言えば、この「浴衣」に該当する部分を自分で作り出すことが出来れば、各サービスの検索結果ページへのリンクが作れるわけです。

ですから、当然検索結果ページへのアフィリエイトリンクが作れるショップであれば、簡単なプログラムで自由にリンク先を操ることができることになります。

さてまずなぜこれらの文字は「%」で始まるアルファベットと数字の文字列になっているのでしょうか。

それぞれの検索結果を良く見てみると、文字列部分の前には「b=」「q=」「word=」といった指定があります。この部分の機能は、URLの中にキーワードを含めて、それをサーバー上にあるプログラムに渡す手法です。

例えばセシールで「b=%97%81%88%DF」が含まれるURLを読み込むと、「Result.aspx」というプログラムが起動され、「Result.aspx」が「はい、キーワードは浴衣ですね」と判断し、検索結果をブラウザーに返す、という仕組みになっています。

キーワードをURLに埋め込んで確実にプログラムに渡すためには、キーワードを「浴衣」という文字そのものではなく、%や数字を組み合わせた記号にする必要があるのです。

「%」など半角の記号やアルファベット・数字は、インターネット上のコンピュータすべてで共通して文字・記号として認識されます。ところが日本語である「浴衣」をそのまま使うと、システムによって解釈が異なる可能性が高く、正確に情報を伝えることが出来ない危険性があります。

このため日本語などの文字列を、一旦世界標準の記号に変更してURLに含め、プログラムの中で再び日本語に戻す、という処理を行います。

記号に変換することをエンコードと呼び、日本語に戻すことをデコードと呼びます。URLで使える記号に変換することは、特に urlencode と呼びます。

urlencode は異なったシステムが存在するインターネット上で、安全確実に日本語などを送る工夫だと考えてください。

では、エンコードされた文字列に違いがあるのはなぜでしょうか?次を見てください。

SJIS:%97%81%88%DF
UTF-8:%E6%B5%B4%E8%A1%A3
EUC-JP:%CD%E1%B0%E1

SJIS、UTF-8、EUC-JP などをそれぞれ「文字コード」と呼びます。

インターネットやコンピュータではすべての情報を2進法の数値情報で格納しています。歴史的に情報の最小単位は8ビット(1バイト)、つまり8桁の2進数です。これは10進数に直すと、0から255に該当します。

英語のアルファベットや数字などだと、255あれば十分格納できますから、8ビット(1バイト)で情報を伝えることが可能です。

ところが、文字数が多い日本語や中国語などは、255にはとても収まりきれません。そこで8ビット(1バイト)ではなく、最低その倍が必要で、「2バイト文字」と呼ばれます。

SJIS や EUC-JP というのは、2バイト文字である日本語を、どのような数字で表現するか、という規格です。「浴」という文字は、SJIS 、EUC-JP それぞれで、異なった2進数の数字が割り当てられているのです。

ちなみに、SJIS は Windows などの一般向けのシステムで従来から用いられてきた文字コードで、現在でも多くの人がホームページを作るときに使われています。

ホームページのHTML文の中に「charset=Shift_JIS」があるのがSJISのサイトです。

一方 EUC-JP はサーバーなどに使われるシステムや、その上で動くPHPなどのプログラミング言語の中で使われることが多かった文字コードです。従って、今でも商用サイトではEUC-JPがよく使われます。yahoo!、楽天市場、ライブドアデパートなどではEUC-JPが使われています。

一方、UTF-8 は日本語1文字を2バイトではなく、3バイトで表現します。実は UTF-8 は日本語だけでなく、中国語やペルシャ語、ヒンディ語、ロシア語…といった、地球上の多くの言語の共通規格として使われるもので、これだけの言語の文字を収納するためには、2バイトでは足りないため、3バイトになっています。

文字数が増えて処理が重くなる代わりに、世界中の主な言語すべてを表現できますから、インターナショナルに利用されるインターネットの、将来のスタンダードになると考えられます。

Google が使っているのは UTF-8 ですが、Yahoo!は EUC-JP。この違いは?

多分、Google は世界中の Google が共通したシステムで考えられているのに対し、Yahoo! の場合は、Yahoo!Japan の独立性が高いので、日本語に特化した文字コードを使っているのではないか、と考えます。

セシールは純粋に日本向けのサービスですから、日本語のコンピュータでは一般的に使用されている S-JIS を採用しているのではないかと思います。

さてではアフィリエイトでどのように使うか、です。

例えば楽天市場だと、任意のページにアフィリエイトリンクをつけることができます。検索結果ページもその対称になります。

また楽天の「お手軽ジャンルカスタマイズリンク」は検索結果の表示もできますが、以下のようなURLになっています。

http://ecustom.listing.rakuten.co.jp/中略&sw=%CD%E1%B0%E1&後略

一度、このようなコードを取得したら、あとは面倒な「お手軽ジャンルカスタマイズリンク」作成の手続きを行わなくても良いのです。sw=以下の部分だけ、検索キーワードを EUC-JP コードに変換し、さらにエンコードしたものを貼り付ければよいのですから。

「そんなこと言っても、EUC-JP にコード変換して、さらにエンコードなんてどうやってやるんですか?」

と言われそうですね。Yahoo! の検索結果を思い出してください。Yahoo! の検索結果のURLの中には EUC-JP をエンコードしたキーワードが含まれています。もちろん、楽天の検索ボックスで検索してもかまいません。

もしCGIやPHPなどのプログラムの知識があるのなら、自動的に検索結果へのアフィリエイトリンクを作ることも可能です。

各社のパターンがわかっているのであれば、一つのキーワードを元に、複数のサイトへのリンクを作ってしまうことも可能になるわけです。

ちなみに、メジャーなサイトの検索で使われる文字コードは以下のようになっています。

UTF-8
Google アマゾン 等(各社のWEBサービスはほとんどUTF-8を使用)

EUC-JP
Yahoo! Yahoo!ショッピング 楽天市場 ライブドアデパート トイザラス 等

SJIS
Bidders セシール ニッセン 等