CGIぽん
モバイルCGI研究(J-SKY編)
2001年11月03日更新

J-SKY絵文字の処理

目次


J-SKY絵文字の正体

J-SKY 絵文字は 「絵文字開始コード」と「絵文字終了コード」に「絵文字コード」を挟んだ形式になっています。

絵文字開始コード 絵文字コード(例) 絵文字終了コード
$ E! 
1B 24 45 21 0F

J-PHONE のサイトで絵文字を調べると "$E!" といった表記が見られますが、初めの "$" が「絵文字開始コード」、最後の "" が「絵文字終了コード」です。間に挟まれた "E!" という ASCII 文字 2 バイトが「絵文字コード」です。

絵文字開始コードの一バイト目 "" と絵文字終了コードの "" は「制御コード」と呼ばれる、いわば文字の割り当てられていない文字コードで、具体的にはそれぞれ "0x1B" (ESC)と "0x0F" (SI)です。( "0x" は「16進数表記ですよ」というしるし)

絵文字コードの部分は、第一バイトが "0x45" 〜 "0x47"、第二バイトが "0x21" 〜 "0x7A" の範囲にありますが、今後も拡張があるかもしれません。第一バイトが同じ絵文字の場合は、第二バイトの文字を複数続けて書いても構わないようです。一方、第一バイトが異なる絵文字の場合は、一旦絵文字終了コードで絵文字を終わらせてから、改めて絵文字開始コードから書き始める必要があります。

さて、ここまで「絵文字開始コード」「絵文字コード」「絵文字終了コード」という言葉を用いましたが、これはわかりやすく説明するために勝手に作った用語で、正確な表現ではありません。

文字コード本来の構造から言いますと、 J-SKY 絵文字はエスケープシーケンスを用いて表されています。エスケープシーケンスは、文字コード表に載りきらない文字などを ESC コードとそれに続く ASCII コードで表現する方法で、終端文字が現れるまでは別の文字コード体系になっていることになります。

J-SKY 絵文字については、 "0x1B" がエスケープシーケンスの開始、 "$" がJ-SKY絵文字であることの宣言、 "0x0F" が終端文字です。


絵文字の除去法

J-SKY 絵文字を除去する置換文は次のようになります。

Perl
J-SKY絵文字除去置換文
# 2001.11.03更新
# EUCでもShift_JISでもJISでもよい。

$str =~ s/\x1B\$[\x21-\x7A]+\x0F//g;

なお、 J-SKY 絵文字は制御コードと ASCII コードからなるので、 jcode.pl で誤変換されることはありません。


絵文字の出力法

絵文字を出力する際には、 J-PHONE のサイトのからコードをコピー&ペーストするのが簡単ですが、テキストエディタによってはペーストがうまくいかない場合があるようです(おそらく制御コードが含まれているため)。そういった場合でも次のようにコードで直接記述すれば大丈夫です。この色で示した部分が絵文字コードです。

Perl
print "\x1B\$E!\x0F";

文字列をシングルクオートで囲むと "\" の文字がそのまま出力されてしまいますので、ダブルクオートで囲むようにしてください。


絵文字の表示能力

J-SKY 絵文字は全部で 270 種類(90 種類 x 3 セット)ありますが、これらは全ての J-SKY 端末で表示が可能なようです。

ただし、入力には制限があるようで、例えば J-SH02 のような古い端末では 90 種類(絵文字コードが "G" から始まる 1 セット)しか入力できません。


関連リンク

公式サイト
絵文字とソースコード一覧
CGIぽん
モバイルCGI研究(ドットi編)ドットi絵文字の処理
モバイルCGI研究(i-mode編)i-mode絵文字の処理

このページの履歴

2001.11.03
絵文字の説明と除去の例の間違いを修正。ご迷惑をおかけしました。
2001.06.27
初版。

CGIぽんはINFOJAMの安価で快適なサーバを利用しています。