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

Shinya Muramatsu revulon @ gmail.com
2011年 8月 22日 (月) 06:21:26 JST


村松です。

すみません。私が誤解をしていた部分がありました。

> 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 を介した方が、内部的にきれいにまとまることは理解しておりますが、
上記の動作が仕様となってしまうのは、少し残念に思います。


もう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 に変換すれば済むことになります。
つまり、

$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");

のような使い方ができるようになります。

--
Shinya Muramatsu <revulon @ gmail.com>


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