From: takeru sasaki Date: 2010-03-04T13:29:56+09:00 Subject: [ruby-dev:40557] Re: [Feature #2833] 絵文字エンコーディングの提案 佐々木です。 コメントありがとうございます。 ・各絵文字エンコーディングがサポートされることは反対ではないです。 ・Googleの絵文字変換組み込まれることも反対ではないです。 現実的には8割9割以上はこれで十分な機能だと思うからです。 > まず、「文字コードの変換」というのはわたしはバイト列同士の変換だと考えています。 > つまり、バイト単位で読み込み、判定し、別のバイト列に変えるのが文字コード変換のレイヤです。 > 一方、そのニーズは文字単位で差し替えたいという話なのですから、レイヤが違うのではないでしょうか。 emoji4unicodeも文字単位で置き換えているように見えるのですが違うのでしょうか? >この置換法則は emoji4unicode の成果物である >http://www.unicode.org/~scherer/emoji4unicode/snapshot/full.html >この表で定義されているものが一般的なんだと思っています。 明らかに「絵」が違うけど「同じこと/もの」を指しているっぽいから文字単位で置き換えましょう、 という仕様だとおもうのです。 > 思うに、そのニーズで真に正しい対処は変換表に手をいれることではなく、 > DBに保存する前の UTF-8 などの段階でどれかの絵文字に揃える正規化をかけるか、 > それぞれの端末向けの文字コードに変換にしたあとで、独自の正規化をかけるのが正解でしょう。 要件次第なのですが、「どれかの絵文字に揃える正規化」をしてしまうと、掲示板に書き込んだ自分の コメントの中の絵文字が入力したものと違う絵文字で表示されたりします。GoogleのUTF8ではこれは 起こらなかったはずです。 「それぞれの端末向けの文字コードに変換にしたあとで、独自の正規化」をしようとしてもGoogleの変換 を使ってしまった時点で元の絵文字が「どのキャリアのどの絵文字」だったかがわからなくてどうにも ならなくて困ったりもします。 まあでも非常にレアなニーズだとおもいます。無視してください。 実はjpmobileの「softbankを0x1000ずらす方式」はGoogleのUTF8よりも良い点があります。 GoogleのUTF8に1度変換してしまうと入力元のキャリアが何であったかがわからなくなってしまう のですが、jpmobileの方式だと元キャリアはコードの範囲からわかるのです。 情報(=元キャリア)の欠落がありません。 > 仮にユーザ定義の transcode を用意したとしてもそれは拡張ライブラリになるんですが、 > 案件ごとに拡張ライブラリを書きたいという話ではないですよね、きっと。 > 思うに、Perl の Encode のように、変換表をそのままライブラリにし、 > 変換を呼んだときにコンパイルしてくれるものを想定していると思うのですが、 そういうものを想定してました。 Ruby本体に用意されないなら必要になった誰かがカスタマイズ可能な絵文字変換器をつくる だけのことなのですが、Ruby本体の仕組みをちょっと借りてスマートに実装できないかと思っただけです。 --- http://d.hatena.ne.jp/urekat/