絵文字変換処理機能の仕様。

しらぎくモバイルシステムのプラグイン(オプション機能)で、iモード対応の絵文字を含んだコンテンツを他端末でも閲覧可能になるように処理するプラグインの仕様に関する解説です。

しらぎくモバイルシステムでの絵文字変換処理の概要。

しらぎくモバイルシステムでは、第3.500版(平成17年 9月26日)から、絵文字変換機能をプラグインで実装しました。

これはiモード向けに書かれた日本語HTML文書に埋め込まれた絵文字コードを他端末向けに適宜変換するというものです。

対応していない環境へは代用アイコン(静止GIF画像を通常の画像同様に適宜変換します)を代わりに配信します。

絵文字変換機能の実装状況。

現在の実装状況は以下の通りとなります。

iモード/Lモード。

国内iモード端末に対してはバイナリコードにして埋め込まれます。

但し、旧型機種で拡張絵文字に対応していないものはその文字のみ代用アイコンとなります。

また、海外iモード端末についても対応できる文字はユニコード数値文字参照に置き換えられます。

Lモードについては、旧型機と現行機で対応範囲が異なるため、それを考慮したものとなります。

WAP 1.0/2.0。

オープンウェーヴ社のブラウザに対してのみ、内蔵アイコンを配信するようにします。

内蔵アイコンは<img>要素のlocalsrc属性でWAP 1.0機種ではアイコン名、WAP 2.0機種にはアイコン番号で指定しております。

国内端末
基本的にKDDI社が公開しているアイコンコードを埋め込みますが、旧型WAPなど一部で対応出来ないアイコンがあり、これらについては自動判別で代用アイコンを利用します。
その他
海外端末では利用出来るアイコンが限られており、これ以外のものは代用アイコンとなります。

WAP 1.0/2.0端末での問題点。

オープンウェーヴ社が配布しているシミュレータでは国内仕様のアイコンは表示出来ません。

このシミュレータにはカシオ計算機製のA5401CAなどをアイコンを除いてほぼ忠実にシミュレートしており、実機と区別は困難です。

しかしながら、WAP 1.0の記述言語であるWML 1.xの仕様ではsrc属性とlocalsrc属性を同時指定した場合、localsrc属性で指定されたアイコンが有効であれば、src属性を無視する仕様、すなわちlocalsrc属性がsrc属性に優先するものの、エラーとなる場合はsrc属性を利用する仕様になっており、WAP 2.0ブラウザでも後方互換性の見地から同様の実装となっているようです。

このため、国内端末独自となるアイコンの表示では全てsrc属性による代用アイコンの指定も同時に行なっております。

オープンウェーヴ社以外の端末の場合。

オープンウェーヴ社以外の端末では、一律に代用アイコンとなります。

ソフトバンク。

ソフトバンク端末に対しては、所定のバイナリコードに変換して埋め込まれます。

但し、非パケット機では、文字コードの一部が対応出来ないため、代用アイコンとなるものがあります。

パケット機でも、相当する絵文字が無い場合は、代用アイコンとなります。

注意

商用サイトでソフトバンクの絵文字を利用する場合、ソフトバンク社への届出が必要になります。このため、強制的にソフトバンク絵文字を全て代用アイコンにする事も出来ます。

H"リンク。

H"リンクでは代用アイコンが表示出来ないため、H"リンクのアイコンが利用出来ない場合は代替文字列に置き換えます。

この文字列は基本的にiモードで定められたものに従いますが、一部異なるものがあります。

エアーエッジフォン。

エアーエッジフォンはH"リンクと全く同じアイコンを利用しますが、同時に画像のインライン埋め込みも可能ですので、対応出来ないものには代用アイコンで対応します。

その他。

その他の端末では、一律に代用アイコンになります。

実際の変換方法。

  1. 先ず、PC向けの数値文字参照のうち、iモードの絵文字に置換え可能なものは、そのように置き換えます。
  2. 続いて、各端末の実装に従った変換表を作成します。
  3. これを元に、iモードの絵文字のバイナリコードや数値文字参照を変換します。但し、但し、ソフトバンクの場合、仕様に従ってバイナリ化すると、HTML変換処理の際にタグの一部と誤認される事があるため、これについては特殊な文字参照に変換して、HTML変換スクリプト側が処理を一通り終えた後でバイナリ化する事で対応します。
  4. HTML変換スクリプトでは、

    1. <img systemsrc>要素に変換されたものはシステム内のアイコン呼出CGIをsrc属性値とする<img>要素に変換します。但し、WAP 1.0/2.0では<img>要素にlocalsrc属性が含まれて変換された場合はlocalsrc属性も附与します。
    2. ソフトバンクでは上述の通りHTML処理の妨げになるため、一旦特別な文字参照に置き換えられ、HTML変換処理の最後でこの文字参照をバイナリに変換します。
    3. その他のバイナリコードにされたものについては、そのまま通すようにします。

参考事項。

PC向け絵文字の文字コードとiモード絵文字の文字コードの存在し得る範囲は、それぞれ2500〜33F0とF840〜F9FEとなるため、衝突は起こりません。

プラグイン作成に当たって工夫した事。

一部上述されているものもあります。

ソフトバンク対策。

ソフトバンクでは、バイナリの中に「<」や「>」が含まれ得る仕様となっており、この処理を施してHTMLコンテンツ変換スクリプトに引き渡そうとすると、HTML変換スクリプトはタグの一部と誤認してしまい文字化けを引き起こす事になります。

このため、一旦特別な文字参照に変換して、HTMLコンテンツ変換スクリプトで対応するようにします。

WAP 1.0/2.0の実装の問題。

WAP 1.0/2.0では公式に利用出来るアイコンの数が限られており、日本のEZウェブではこれを独自に拡張してサーヴィスしております。

オープンウェーヴ社が配布している開発者向けシミュレータでは、この独自アイコンが実装されておらず、このため正常に表示出来ないだけでなく、システム障害を引き起こす事もありました。

この対策として、実装が保証されていないアイコンの表示については必ずsrc属性で代用アイコンを指定するようにしました。

iモード以外のキャリア。

iモードと高い互換性がありますが、iモードマークなどは実装していません。

代りに別の文字コードでLモードマークが実装されているのでこれに置き換えます。

WAP 1.0/2.0, ソフトバンク及びエアーエッジフォンについても、同様に代用アイコンに置き換えます。

負荷対策。

このスクリプトでは変換表の作成にかなりの時間が掛かり、それが相当な負荷になると思われます。

このため、変換の必要が無い場合、すなわち適切なバイナリや数値文字参照が見出されない場合は処理せずにそのまま受取ったHTMLデータを返すようにしております。

具体的には、「&#数字」「&#x」またはキャラクタコードが0xf8か0xf9で始まる 2バイト文字を検出した場合にのみ変換処理が実行されます。

代用アイコンについて。

代用アイコンについて、システム設置ディレクトリ直下のサブディレクトリ「icons」内に「Add-iIcon」ディレクトリを設置し、そこに収納する事となっております。

アイコンは14ピクセルズ四方と32ピクセルズ四方の二つの解像度があり、いずれも透過静止GIF画像となります。

ファイル名はiモードのシフトJISコード十六進数四桁(英字は大文字)に「.GIF」がついたもので、32ピクセルズ四方のものは、頭に「L-」が付きます。

この他、私的なアイコンも用意されております。

追記。(平成17年10月 7日)

HTML文書においては、単純に絵文字を<img>要素などに変換すると、コンテンツ処理の誤作動を引き起こす箇所があります。

このため、幾つかの工夫をしております。

<title>要素内

<title>要素の内容にマークアップされた要素が入る事は禁止されているので、内蔵されていない絵文字は「?」に変換します。

各要素の属性値

要素の属性値にタグを入れるとそこでタグが終わったものと誤認する恐れがあるので、いくつか工夫しております。

  1. 属性値を「"」(二重引用符)で囲んでいる場合は、<img>要素のタグ内の「"」(二重引用符)を属性値の終わりとせずに読み続けるようにします。

    1. 属性値を全く引用符で囲んでいない場合も、<img>要素内の空白や<img>要素タグが終わる「>」で切らずに読み続けるようになっております。
    2. 「'」(単引用符)で囲んでいる場合は、<img>要素内に「'」(単引用符)書き出される事は無いため、現時点では特に意識しておりません。
  2. 更に属性値内の「<」や「>」は自動的に実体参照に書き換える事でトラブルを回避します。
  3. 但し、<a>要素で内部画像をリンクする場合、その画像の説明を記述するtitle属性内の<img>要素タグはそのままの状態で引き渡すようにします。こうする事で、画像に対しての見出しにも絵文字が使えるようにしております。

    • <a>要素で内部画像をリンクする場合、title属性値はクエリに引継がれますが、クエリでは生の「<」「>」をURLエンコードします。

今後の課題。

ユニコードにも対応したいと思います。

日本でも、現行機種ではユニコードの数値文字参照に対応した端末になっております。

他端末の絵文字からの変換にも対応したいと思います。

現在はiモードとPC(一部)からのみの変換に対応しておりますが、WAP 1.0/2.0やソフトバンクの絵文字を処理できたらと思います。

代用アイコンのデザインも改良したいと思います。

代用アイコンはドコモのデザインに準じたものとしましたが、他社に較べて非常に地味なデザインとなっております(その代わり白黒端末でも問題無い表示になるのですが…)。

これをもう少しオリジナリティのあるものに出来たらと思っております。


ページ外へのご案内。