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

Rui Hirokawa rui.hirokawa @ gmail.com
2011年 8月 19日 (金) 21:41:48 JST


廣川です。

コメントありがとうございます。

> UTF-8 ←→ UTF-8-Mobile
> UTF-8 ←→ SJIS-Mobile

の部分の解釈が少し異なるようです。

libmbfl のコード変換はUnicodeに対する相互変換の
実装となっており、この部分は、

Unicode 6.0 <-> UTF-8-Mobile
Unicode 6.0 <-> SJIS-Mobile

のように実装されています。(UTF-8との相互変換ではない)

通常のUnicode と UTF-8 の間の変換は算術変換で定義されるにも
かかわらず、上記の変換では、UTF-8-Mobile 上ではPUA領域にある絵文字を
Unicode 6.0の絵文字領域に変換するため、少しわかりにくいの
ですが、Unicode とのマッピングが1種類ですむという意味では
わかりやすいのではと思います。

例えば、UTF-8-Mobile#KDDI から SJIS-Mobile#DoCoMoへの
変換は、

UTF-8-Mobile#KDDI -> Unicode 6.0 -> SJIS-Mobile#DoCoMo

のように内部的に行われます。

この過程で相互にマッピングが定義されない文字については
代替文字に置き換わりますが、対応するマッピングがある文字については
失われることはないのではと思います。

下記、一部の文字というのは何か具体的な文字を想定されているのでしょうか?

> ですので、UTF-8-Mobile と SJIS-Mobile との間の変換については、
> 
> UTF-8 ←→ UTF-8-Mobile ←→ SJIS-Mobile
> 
> のように、Unicode 6.0 を介さずに処理する方が良いのではないかと思うのですが、
> いかがでしょうか? ご検討いただけると幸いです。

UTF-8 <-> UTF-8-Mobile の部分がよくわからないのですが、
ここで想定している変換はどのようなものでしょうか?

UTF-8-Mobile は形式上は通常のUTF-8と同じで、単に
PUAのマッピングが各キャリア対応になっているだけのものですので、
PUAのマッピングを変更することになりますが、具体的なアイデアを
思いつきません。

UTF-8-Mobile <-> SJIS-Mobile

の変換自体は、実際には比較的容易に算術変換で変換できるのですが、
Unicodeを介することでいろいろな組み合わせを実現するlibmbflの
実装との整合性や将来性を考えると、Unicode 6.0 を介する方が
良いかと考えています。


(2011年08月19日 01:30), Shinya Muramatsu wrote:
> 村松と申します。
> 
> HTML_Emoji という PHP の絵文字ライブラリを作って公開しているので、
> その時の経験から意見を述べさせていただきます。
> 
> 以下のコメントは、
> http://d.hatena.ne.jp/rui_hi/20110813/1313242399
> に書かれている、現時点での仕様に対するものですので、
> そちらも合わせてご参照下さい。
> 
> なお、申し訳ないのですが、時間の都合もありまして、
> まだ実際にソースコードを見たり、テストしたりはしておりません。
> 考えに誤りがあるかもしれませんので、参考意見くらいに捉えて下さい。
> 
> ユーザーの視点から見た仕様としては、上記のページに書かれているように、
> 
> ・UTF-8-Mobile#xxx を新たに定義する
> ・SJIS-Mobile#xxx-PUA は SJIS-Mobile#xxx に統合する
> 
> のようにするのが、すっきりとして妥当だと思います。
> エンコーディング名は、Ruby 1.9.2 以降のように、UTF-8-docomo, SJIS-docomo
> のような名前にしても良いのかもしれません。
> 
> ただ、現在の実装は、
> 
> UTF-8 ←→ UTF-8-Mobile
> UTF-8 ←→ SJIS-Mobile
> 
> のように Unicode 6.0 とのマッピングを用意しようとしているのだと思いますが、
> そのようにすると、UTF-8-Mobile と SJIS-Mobile との間で変換をした時に、
> 一部の絵文字が破壊されてしまうのではないでしょうか?
> ですので、UTF-8-Mobile と SJIS-Mobile との間の変換については、
> 
> UTF-8 ←→ UTF-8-Mobile ←→ SJIS-Mobile
> 
> のように、Unicode 6.0 を介さずに処理する方が良いのではないかと思うのですが、
> いかがでしょうか? ご検討いただけると幸いです。
> 
> 以上、よろしくお願い致します。
> 
> --
> Shinya Muramatsu<revulon @ gmail.com>
> _______________________________________________
> PHP-dev mailing list
> PHP-dev @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-dev


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


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