mail2****@lists*****
mail2****@lists*****
2012年 6月 4日 (月) 20:20:23 JST
バナナさん。 トゥイーです。 > 絵文字を違う文字に変換してみました。 > Stringクラスのgsubメソッドを使い、パターンマッチで絵文字を16進数でマッチさせ任意の文字で置換させることが出来ました。 了解です^^ サンプルは重要なので trunk/tools っていうフォルダに溜め込むことにしています。 emoji とかフォルダを作ってサンプルを入れて置いといてもらえますか? シンプルであればあるほど、残しておくと後々絶対に役に立ちます。 何かあったときに振り返って確認するためにそういうものを残しておいています。 > まだ、ローカルのテキストファイルからの読み込みなので、 > 次はPOPで受信した内容から置換するような感じでしょうか?? 段階的にやっていきましょう。 絵文字はキャリア(機種?)によって種類が違うと思うんです。 それぞれごとに変換処理が必要になるものと思っています。 これはのちのちに抽象化することになりますが、 まずは抽象化は考えずに、1種類ずつやっていきましょう。 文字列を受け取って変換するプログラムを機種毎に作って、 tools/emoji フォルダに入れてもらえますか? > ひとつ気になったのが、絵文字のコードは同じ文字セットのほかの文字コードと > 重なる事はないと思いますが、ある文字の後ろ4ビットとある文字の先頭4ビットにマッチしてしまうことってないのかなとふと思いました。 > その場合、このパターンマッチを利用して置換させると思わぬ文字化けが発生するかもと思ったりします。 > 回避するには文字単位で検索し、置換をするのかなぁと思ったりしますが、 > トゥイーさんはこの辺をどう考えていますか? その点が絵文字対応の難しいところです。 バイト単位での処理は文字コードに関する膨大な知識が必要になるので正直難しいと思っています。 そこで収集した情報を以下のチケットに書いています。 ・絵文字対応 http://sourceforge.jp/ticket/browse.php?group_id=5585&tid=26971 どうやら Ruby 1.9 は絵文字専用のエンコーディングを持っていて、 絵文字1つ1つを1つの文字として認識してくれるようなのです。 その機能を使えば上記の問題は解決できるのではと考えています。 上記で「Ruby 1.9 は」と書きました。 そう、この絵文字識別の機能は Ruby 1.8 には存在しません(確認していませんが、しないはずです)。 そもそも Ruby 1.8 は文字列をバイト列としてしか見ておらず、文字という単位での処理ができません。 従って、Ruby 1.8 を利用している場合は、絵文字をサポートしないという対応にしようと考えています。 Ruby のバージョンは以下のコードで確認できるので、そのような対応が可能です。 if RUBY_VERSION < '1.9.0' then # Ruby 1.9 より前の Ruby 処理系で実行された場合 else # Ruby 1.9 以降の Ruby 処理系で実行された場合 end