[PHP-dev 1518] Re: 絵文字 <-> Unicode 6.0 変換

Rui Hirokawa rui.hirokawa @ gmail.com
2011年 8月 23日 (火) 22:12:47 JST


廣川です。

(2011年08月22日 06:21), Shinya Muramatsu wrote:
> 村松です。
> 
> すみません。私が誤解をしていた部分がありました。
> 
>> UTF-8 ←→ UTF-8-Mobile
>> UTF-8 ←→ SJIS-Mobile
>> UTF-8 ←→ UTF-8-Mobile ←→ SJIS-Mobile
> 
> これらの UTF-8 と書かれていた部分は、Unicode 6.0 と読み替えて下さい。
> 
> 
>> 下記、一部の文字というのは何か具体的な文字を想定されているのでしょうか?
> 
> 具体的には、http://d.hatena.ne.jp/rui_hi/20110813/1313242399 の注意に
> 書かれているベンダのロゴ等の文字です。
> PHP 5.4 dev で以下のコードを実行してみましたが、やはり期待とは異なる答えが
> 得られました。
> 
> $sjis = "\xF9\x75";
> $utf8 = mb_convert_encoding($sjis, "UTF-8-Mobile#DOCOMO", "SJIS-Mobile#DOCOMO");
> 
> Unicode 6.0 を介した方が、内部的にきれいにまとまることは理解しておりますが、
> 上記の動作が仕様となってしまうのは、少し残念に思います。

ベンダのロゴはUnicode 6.0から外されてしまっているのであまりサポートする
気がありませんでした。個人的に 109(マルキュー)とかはある意味日本の
カルチャーだと思いますので、入れてくれてもよかったのにと思いますが。。。
これらの文字は、私用域にマッピングするしかありません。
BMPの私用域にマッピングするのでも良いのですが、ここはすでに混んでいて他
と干渉する可能性があります。
ということで、私用面(PMP)を利用するGoogleのコード(emoji4unicodeで利用
されている)が良いような気がします。
Unicode 6.0 とのマッピングを追加するようにしてみます。

> 
> 
> もう1点、気付いた点があります。
> 例えば、Wiki や掲示板で絵文字を使うケースを想像していただきたいのですが、
> 現在の仕様ですと、3キャリアの絵文字が混在したデータを扱うことができません。
> また、http://d.hatena.ne.jp/rui_hi/20110821/1313905393 に書かれているように、
> KDDI の公式マッピングに基づいた UTF-8 は、使い物になりません。
> 
> そこで、あくまでも1つの案としてですが、
> 
> UTF-8-Mobile#DOCOMO
> UTF-8-Mobile#KDDI-B
> UTF-8-Mobile#SOFTBANK
> 
> この3つは絵文字の領域に重なりがないのですが、これらを統合したような、
> UTF-8-Mobile というエンコーディングを新設することは可能でしょうか?
> そうすれば、絵文字混じりのデータをデータベース等に保存する際には、
> UTF-8-Mobile に変換すれば済むことになります。

少し意味がわからないのですが、
Unicode 6.0のマッピング可能な絵文字はUnicodeの文字空間として
統合されており、通常のUTF-8としてデータベースに保存・取得することが
できます。

下記の例は、以下のようなシンプルなコードで実現できます。

$utf8  = mb_convert_encoding("\xF8\x9F", "UTF-8", "SJIS-Mobile#DOCOMO");
$utf8 .= mb_convert_encoding("\xF6\x60", "UTF-8", "SJIS-Mobile#KDDI");
$utf8_sb = mb_convert_encoding($utf8, "SJIS-Mobile#SOFTBANK","UTF-8");


> つまり、
> 
> $sjis_docomo = "\xF8\x9F";
> $sjis_kddi   = "\xF6\x60";
> $utf8  = mb_convert_encoding($sjis_docomo, "UTF-8-Mobile",
> "SJIS-Mobile#DOCOMO");
> $utf8 .= mb_convert_encoding($sjis_kddi, "UTF-8-Mobile", "SJIS-Mobile#KDDI");
> 
> $utf8_softbank = mb_convert_encoding($utf8, "UTF-8-Mobile#SOFTBANK",
> "UTF-8-Mobile");
> 
> のような使い方ができるようになります。
> 


-- 
Rui Hirokawa <rui.hirokawa @ gmail.com> (@rui_hi)


PHP-dev メーリングリストの案内