• 締切済み

AU絵文字をUTF8->EUCJP-winで文字化け

初めて質問させて頂きます。宜しくお願い致します。 只今携帯サイトを趣味で開発してるのですが、以下の所で 詰まってしまっています。 [環境] 開発文字コードUTF-8(SBのG3も対応したい為) 保存DB MySql EUCJP フォームから入力された値をDBに保存して、再度読み出したいのですが、 $buf = pack('H*', 'ef82b2'); // AU 絵文字 (ハート) print "ef82b2 -> " . $buf //実機で見た時に絵文字が表示されます $buf = mb_convert_encoding($buf,"eucJP-win","UTF-8"); print "euc -> " . bin2hex($buf) //ここで見ると0x3Fになります $buf = mb_convert_encoding($buf ,"UTF-8","eucJP-win"); print "utf8 -> " . bin2hex($buf)//ここで見ると0x3Fになります 上記のようにeucJP-winに変換した時点でコードがおかしくなっています。 ※DoCoMoの絵文字'ee****'の場合は正常に変換が出来ます。 これはAU絵文字の場合はeucJP-winの文字コード領域?の範囲を超えてるとかそういうことでしょうか?ネットで探して見たのですが、見つかりませんでした。 どうかご教授下さいますようお願い致します。

みんなの回答

回答No.1

基本的に携帯用の絵文字は、EUC-JPやUTF-8で他の文字が存在しない領域を使用していると思います。 EF82B2がAUの絵文字と言うことは知りませんでしたが、EUC-JPには該当する文字は無いと思います。 通常、日本語には存在しない文字だと思うのです。 つまり >これはAU絵文字の場合はeucJP-winの文字コード領域?の範囲を超えてるとかそういうことでしょうか こういうことですね。 Docomoの絵文字が元に戻るのはたまたまだと思います。 私も絵文字のコンバータを作ったことがありますが、絵文字を取得した時点で特殊な記号に変換して保存する方法を取りました。 他のサービスを見ても、大体どのサービスでも絵文字のデータベースを用意していて、それぞれ特殊な記号に変換して保存しています。 http://c.peps.jp/pc/emoji_code.php?mode=2 ここはとあるサービスの絵文字変換です。 ここは記号ではなくそのまま日本語として保存しているようですね。 [晴れ]と保存されていれば、携帯で見た場合は各キャリアで用意されている太陽の絵文字を、PCで見た時は画像として出力するような仕組みになっていると思います。 /([\xEB-\xED][\x40-\xFC])|(\xEE[\x40-\x8D])/ AUの絵文字のページであるUnicode表を見る限りでは、こんな範囲になっていると思います。 これで取得したデータをbin2hexするなどして、該当するテーブルから予め用意してある記号に変換するのが一般的じゃないかな?と思います。 また、以下のページで配布されている物があるようです。 http://surf-style.us/ ちょっと詳しくは見てないですが、使えそうな気がします。

関連するQ&A