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

Rui Hirokawa rui.hirokawa @ gmail.com
2011年 8月 25日 (木) 23:25:26 JST


廣川です。

まず村松さんも含めて基本的なニーズの認識は私とあまり違いはないのではと
思います。

必須だと思っているのは、あさかわさんの書かれている内容とほぼ同じで、
以下の機能です。

1.キャリアAの絵文字は格納した後、キャリアAに対して同じ文字として表示
 できること。(可逆であること)
2.異なるキャリアの絵文字はキャリアAから格納後、キャリアBで表示した際に
 少なくとも欠落せず、固定したコードポイントを得ることができること。
 (対応する文字がない場合でもフォールバック機能を作成できること。)
3.キャリアAの絵文字をUnicode 6.0に格納後、キャリアBに出力する際に
 対応する絵文字がUnicode 6.0のマッピングに定義されている場合は、
 キャリアBの対応する絵文字として出力可能なこと。
 

1は当前のニーズで、Unicode 6.0に含まれない文字(iモードのロゴなど)が
問題となりますが、Googleが提案したコードのマッピングを利用する実装を
昨晩コミットしましたので、現時点でsvn.php.netから取得できるコードでは
キャリアが公開する全ての絵文字で上記1が可能です。

2についても当然で変換できない文字をユーザが明示的に指定することなく排除
することは避けるべきです。これは、キャリアAの特定の絵文字に対応した絵文
字がキャリアBにない場合のフォールバック機能(例えば代わりに文字列や画像
へのリンクを表示するなど)を実装する際に必要となりますが、これも従来と同
様に例えばmb_substitute_character("entity") などとすることで可能です。
ただし、従来は数値参照で出力されるコードポイントが従来のUnicode PUAから
Unicode 6.0のポイントに変わりますので、フォールバック機能の実装で置換す
る文字列を更新する必要があります。

3は、キャリア間の絵文字変換として一定のニーズがあり、また、PCや
スマートフォンなどでは、OS X LionのApple絵文字に見られるようにUnicode
6.0の絵文字を直接サポートするようになることが予想され、相互運用としての
ニーズがあると思っています。

PUAとのマッピングを自由に設定できるのはある意味理想かもしれませんが、わ
かりやすい実装を作るのは困難ですし、現状でも
mb_encode_numeric_entities()、mb_decode_numeric_entities() 等である程度
は実現できるかもしれません。
手段がないのは困るというのはおっしゃる通りと思います。


(2011年08月25日 12:00), 浅川 倫之 wrote:
> あさかわです。
> 
>>
>> 「正しい変換」の解釈が異なるのかもしれませんが、汎用のUTF-8を指定してい
>> る以上、これは仕様でありUnicodeとUTF-8の変換としては正しい動作です。
> 
>> 
> 
> 廣川さんのおっしゃるというか、文字変換のシステムを作成してくれる開発者の思想として正しい動作だと思います。
> 
> しかし、絵文字を必要とするニーズとしては。
> 
> ドコモの絵文字を格納してドコモで表示
> AUの絵文字を格納してAUで表示
> SBの絵文字を格納してSBで表示
> 
> する時に、欠落なく元と同じ文字で表示される事はもちろん。
> 
> PC上で、ドコモ,AU,SBの絵文字を表示する時にフォントとして存在しない文字を表示する場合に画像を利用したりしますが。その場合に、対応するコードポイントが保持されていないとそれもできない事になります。
> 
> PCではなくても、AUの絵文字の入っているデータを、ドコモで表示する時にも、表示できない文字は画像を利用するなどの対応が必要な時もありますので、表示できない文字を欠落させられるとそれができません。
> 
> すると、データとして格納する時は、キャリア別のコードのまま格納して、出力で対応する事になり
> せっかくつくっていただいた、機能を利用できない事になってしまいます。
> 
> そういうケースがレアかレアじやないかというのは、その人のおかれる立場で違います。
> 
> HTML_Emoji という PHP の絵文字ライブラリを作って公開してくれている村松様のご意見は、
> そのレアじゃない立場を代表してくれています。
> 
> じゃそういう人はHTML_Emojiを使えばよいじゃないかと言う意見もあるでしょうが,
> 村松様がご意見を述べられているという事は、自分のライブラリが不要になってでも
> PHPの本体に機能が追加される事を望んでいるのだとおもいます。
> 
> そのためには、すくなくとも。HTML_Emoji利用と同等になっていて欲しいと思います。
> 
> 
> [Unicode 6.0を介した統一された変換をサポートする]
> 
> という趣旨で、Unicode 6.0で定義できない文字を,変換側で排除することで、特別な対応なくどのブラウザでも
> 同じ文字が表現できるというメリットがあります。
> 
> しかし、Unicode 6.0で定義できない文字を,変換側で排除されてしまうと特別な処理を必要とするシステムでは作成できない事になります。
> 
> 現状でも、PHPにかぎらず。ISO-2022では無いということで半角カナを捨てるライブラリがあったりしますが
> そういう場合は、半角仮名を許容したい場合には使えないわけです。
> 
> こういう立場もあることをご理解ください。
> 
> PUAへのマッピングを、プログラマが再定義できる様になっているとかでも良いと思います。
> 
> ワールドワイドな統一思想からは明らかに逸脱した、狭い世界のニーズなので、
> 簡単には使えないのでもかまわないと思います。でもできないのが困ります。
>

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


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