仕事で、DoCoMo / AU / Softbank の3キャリア向けのコンテンツプログラムを作っています。
それぞれの携帯向けのページ作成は、違うところもあり、根本的には同じところもあり、いろいろと微妙な面を含んでいます。
が、大体「絵文字以外は一緒」という認識でいいでしょう。
そんなわけで、多くの人の興味が「絵文字部分はどう違うのか」に集中するわけですが、勘違いしている人も多く、どうもうまくまとめられたサイトを見ることがありません。
特に、ソフトバンクは勘違いから来る「へんなやつ」扱いが多く、見ていて悼まれないです。
(まぁ、実際変なところも多いのだが…)
そこで、自分がうまくまとめてやる! …などといえれば格好悪いのですが、そんな暇も無いので、せめて誤解を解くことができれば…と、メモしておきます。
1) DoCoMo の絵文字
i-mode は、事実上世界で最初の「スマートフォン」です。
(欧米での定義は、ネット接続可能な携帯のこと。キーボードなんて無くてもよいし、独自OSでもかまわない)
いろいろと最初ゆえのお行儀の悪さ、拡張性のなさも目立ちますが、非常に現実的で、うまい実装をしています。
この実装には、まず JIS と ShiftJIS の違いを知らなくてはなりません。
ShiftJIS は、「コードをずらした(Shiftした)」もので、文字セットとしては同じものですが、「保持できる文字数」が違います。
JIS では、全ての文字を 7bit で表します。今のコンピューターは 1byte が 8bit ですが、昔は 7bit のものも多かったためです。
(余談だが、1byte 、という単語が必ずしも 8bit を意味するとは限らない。8bit を厳密に示したい場合は octet 、7bit を示したい場合は septet と言うべき)
ともかく、7bit 2文字で示す JIS では、最後の文字コードは 16進数で 7E7E となります。
(7F はコントロールコードに割り振られているため、避けている)
これを 8bit 2文字で示す ShiftJIS で表現すると、 EFFC。ShiftJIS の最後は FFFF ですから、もう少し詰め込めることになります。
そこで、この「ShiftJIS にしか存在しない領域」に絵文字を詰め込んだのが、i-mode の絵文字コードになります。
ここには、「絵文字は文字の一種である」という思想があります。いわば、象形文字であり表意文字である「漢字」に、新たな文字を定義しただけ、というのが DoCoMo の絵文字であり、日本人にとっては非常に扱いやすいものでした。
その一方、ShiftJIS -> JIS 変換をすると、絵文字は行き場がなくなります。
インターネットメールは JIS で送信するのが慣習(先に書いたように、7bit しか扱えないコンピューターが存在することを前提としているため)ですが、DoCoMo の絵文字はインターネットメールでは送信できないことになります。
また、サーバー側で内部コードを EUC-JP (これも ShiftJIS とは違う方法で JIS コードをずらしたコード体系。ASCII と漢字の区別を、単純に JIS コードの 8bit 目を 1 にすることで行う)で扱いたい…などという場合にも、コード変換できません。
後に、JAVA で扱うために、Unicode の外字部分にもコードが割り振られています。
2) AU の絵文字
i-mode よりも以前から「スマートフォンの共通規格として」策定されていた、WAP をベースとして作られています。そのため、お行儀の悪さはありません。
絵文字は、「デバイス内部に内蔵した画像」として、扱います。そのため、表示には img タグを使用します。
このため、送信文字コードを問いません。EUC-JP で扱いたい、という場合でも、絵文字は ASCII で書かれた img タグであるため、日本語コード変換の影響を受けません。
漢字コード表の一部に勝手に文字を追加する、というような行儀悪さもありません。
しかし、見た目は「文字」と同じサイズなのに、部分的に画像になっている、という扱いにくさはあります。
また、画像は初期の頃頻繁に更新され、同じ絵文字でも4種類の見た目があります。これも扱いにくい部分。
img タグ…ということは、ユーザーが入力したらどうなるか。
当初は「入力できない」という仕様でした。しかし、これが i-mode に比べて使いにくいと不評だったため、途中から仕様変更して、DoCoMo と同じように ShiftJIS の F000 以降の未定義部分にコードを割り振りました。
そのため、表示の際には img タグで、ユーザーからの入力を受け取る際には ShiftJIS の未定義領域として受け取ります。
(表示の際に ShiftJIS として送ることも可能だが、古い機種での動作は保証外)
ただ、これだと DoCoMo と同じように「JIS にできないのでメールで送れない」という問題を起こします。
そこで、AU は、メールの場合専用で、JIS コードの内部でありながら漢字が設定されていないところに、勝手に絵文字を入れ込んでしまいました。
これはメールのとき専用のコードですが、とにかくインターネットメールでも絵文字を使用することが出来ます。(表示できるかどうかは、受信側の問題)
また、i-mode と同じく、Unicode の外字部分にもコードが割り振られています。
つまり、au の絵文字には
・img タグで表示するためのコード
・WEB で表示するための ShiftJIS コード
・メールで送信するための JIS コード
・Java で扱うための Unicode
が設定されていることになります。
当初の志の高さはどこへやら… i-mode の真似をしようとして、もっとひどいことになってしまいました。
3) Softbank の絵文字
最後発の…当時は J-PHONE でしたが、いろいろと研究しています。
絵文字は、「文字コード平面を切り替える」ことで表現します。
文字コード平面、というのがわかりにくい概念ですが、たとえば JIS コードでは、「ASCII と日本語(漢字)は、別のコード表を持っている」と考えます。
そして、コントロールコードを使って、この「コード表」を切り替えます。
漢字に切り替えると、2バイト(正確には、7bit x 2)送るたびに漢字を一文字表示します。ASCII に切り替えると、1バイト(7bit)で英数字を1文字表示します。
そして、Softbank では、「絵文字」に切り替えるためのコントロールコードがあります。
絵文字に切り替えてからは、1バイト(7bit)で1つの絵文字を表示します。
絵文字は多数あるため、6つの絵文字平面があり、切り替え時に指定します。
絵文字への切り替えに3バイト、絵文字自体の表現に1バイト、漢字への復帰に1バイト使用するため、1文字の絵文字を書くのには5バイト必要です。
ただし、同じ絵文字平面で連続した複数の絵文字を表現する場合、2文字目以降は1文字1バイトで表現可能です。
JIS コードの仕組みを知らない人には、この表現形式がにわかに理解できないようで、「ソフトバンクは変態で使いにくい」という評価になっているようです。
しかし、この形式ですと、絵文字は「文字と同列に送れる」のに「日本語のコード変換の影響を受けない」という利点があります。
絵文字は 7bit の文字列であらわされるため、インターネットメールに送っても問題ありません。
しかし、後に DoCoMo / AU と同じく ShiftJIS の F000 以降にもコードが割り振られています。
(一応誰でも入手可能な公式資料にコード表があるのだが、非常にわかりにくいところに書いてある。
また、一世代前の 2G 機種では使える、と書いてあるが、現行機種の 3GC に関する記述は無い)
また、Unicode の外字部分にもコードが割り振られています。
…途中から i-mode などの「デファクトスタンダード」に擦り寄る形で変節しているものの、これはこれで良く出来た形式。
これを馬鹿にする人の気持ちがわかりません。
ただ…本当にソフトバンクが「困ったちゃん」なのは、ここからですね。
ユーザーが絵文字を入力した場合、サーバーの受け取るコードは、次の5つのいずれかです。
a) 7bit の文字列で表現された、WEB 用絵文字コード
b) ShiftJIS の外字部分に割り振られた絵文字コード。
c) Unicode の外字部分に割り振られた絵文字コードを UTF-8 で表現したもの。
d) サーバーで「全角空白」に置き換える形で絵文字を削除した文字列
e) サーバーで、単純に絵文字を削除した文字列
機種によって違います。どの機種がどの方法で送ってくるか、は良くわかりません。
(だれか、全機種で調べた人いるんだろうか? Softbank の公式資料にも載っていない)
PC からソフトバンク携帯にメールを送る場合の絵文字の扱いも変です。
ソフトバンクでは、「メールの最初の192文字」までは無料で送られてきて、必要なら有料でそれ以上を取得するのですが、
a) 192 文字までの部分では、WEB 用絵文字コードで絵文字が表示できる
b) 全体を取得した場合、WEB 用絵文字コードでは絵文字が表示できない
c) UTF-8 で絵文字を埋め込むと、192文字までも、全体でも表示できる。ただし、3GC 専用。
d) ShiftJIS で絵文字を埋め込むと、192文字までも、全体でも表示できる。おそらく全機種で大丈夫。
ただし、先に書いたように ShiftJIS のコードは、公式には非常にわかりにくい資料中にありますし、公式には 2G でしか使用が保証されません。
これは、デコレメール(HTML メール)でも同じ。HTML なのに、WEB 用コードでは表示できないのです。
なんでこんなことになっているかといえば、192文字までは携帯専用のショートメッセージだが、全体になるとインターネットメールだ、という思想らしい。
インターネットメールだから、WEB 用絵文字コード、という特殊なものは処理しないのですね。でも、UTF-8 や ShiftJIS で送られてきたものは「外字」だから表示する。これはこれで、筋が通った話です。
なんか、最後に Softbank の特殊性をいろいろ書いていますが、これは一応 Softbank に対する擁護記事です。…多分。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |