• 締切済み

Unicode-Japaneseでの絵文字変換

Unicode-Japaneseを使って別キャリアの絵文字を相互変換しようと 思っています。 ソースはShift_JISで作成、画面表示もShift_JISです。 $in{text}はformからの受取です。Softbankの3G端末でテストしています。 入力を受け取り、一度、utf8に変換後、また元に戻しているつもりですが、 $str2を画面に表示しても、絵文字が化けてしまっています。 (普通のテキストなら化けません) 何か考え方が間違っているでしょうか。 以下、変換して戻している部分です。 うまくいった場合には、$str1 をデータとして保存しようと思っています。 $s = Unicode::Japanese->new($in{text},"sjis-jsky"); $str1 = $s->conv("utf8"); $s = Unicode::Japanese->new($str1,"utf8"); $str2 = $s->conv("sjis-jsky"); よろしくお願いいたします。

  • Perl
  • 回答数1
  • ありがとう数2

みんなの回答

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

??絵文字?? 顔文字じゃなく絵文字? 画像っぽい1文字の表現の絵文字? どっちにしろutf経由だと(日本の)携帯の絵文字は認識不能の変換できないコードだから化けるんじゃない? どうしてもというなら変換表を作り、一旦別表記…別キャリアに送ると表示されるような"[なす]"の様な手合いかこのサイトのリンクみたく有り得ない実態参照変換…つまり別の化けないascii文字列へ変換してから戻すって形にしたら良いんじゃないかな。 文字列はどこかのBBSやSNSとかで使われるような変換を参考にしたら良いと思うよ。

kt_yuka
質問者

補足

はい。絵文字です。 http://search.cpan.org/~hio/Unicode-Japanese-0.44_02/lib/Unicode/Japanese/JA.pod#(21205)(20316)(12395)(24517)(35201)(12394)(12418)(12398) これを使おうとしています。 Encode::JP::Mobileでは成功するのですが、どうしてもPurePerlのものが ほしくて試しています。

関連するQ&A

  • Jcodeで変換できません。。。

    下記のCGI(文字コードはutf-8)を作成したのですが、正常に表示されません。 ~を上手に判定できていないということでしょうか??? また、もし、正しく変換できないのであれば、Jcodeで変換できない文字の一覧などあれば助かります。 分かる方、何卒、宜しくお願い致します。 #!/usr/bin/perl print "Content-type: text/html;charset=Shift_JIS\n\n"; $str = "1~10"; use Jcode; Jcode::convert( \$str,"sjis","utf8"); print $str; 表示された結果 1?10 となりました。

    • ベストアンサー
    • Perl
  • sendmailからblatjへ

    初めまして。 今cgiフォームメールがあるのですが、sendmail用で使われています。これをBlatjにソースを変えることはできるのでしょうか?cgi,perlは難しく、誰か教えて頂けないでしょうか?宜しくお願いします。 ソースは以下です。 sub _Send_mail { my ($fromaddress, $toaddress, $subject, $body) = @_; $fromaddress =~ s/\n//g; $fromaddress =~ s/\r//g; $toaddress =~ s/\n//g; $toaddress =~ s/\r//g; $toname =~ s/\n//g; $toname =~ s/\r//g; $subject =~ s/\n//g; $subject =~ s/\r//g; # $subject = encode("cp932", decode("utf-8", $subject)); # $body = encode("cp932", decode("utf-8", $body)); if($moji_code eq "UTF-8"){ $subject = Unicode::Japanese->new($subject)->sjis; $body = Unicode::Japanese->new($body)->sjis; $toaddress = Unicode::Japanese->new($toaddress)->sjis; } open(SENDMAIL, "|/usr/sbin/sendmail -t"); my $str = Jcode->new("From: $fromaddress\n")->mime_encode; $str .= Jcode->new("To: $toaddress\n")->mime_encode; $str .= Jcode->new("Subject: $subject\n")->mime_encode; $str .= "MIME-Version: 1.0\n"; $str .= "Content-Type: text/plain;charset=\"ISO-2022-JP\"\n"; print SENDMAIL $str; print SENDMAIL Jcode->new("$body")->jis; close(SENDMAIL); } __END__

    • 締切済み
    • CGI
  • javaの文字コード変換について

    javaの文字コード変換についての質問ですが 1 shift_jis → jis83 → jis78 2 jis78 → jis83 → shift_jis と変換をかけたいと思っていますがどのようにすれ ばいいのでしょうか? String str = new String( "hogehoge", "XXX" ); でコンストラクタの2つめの引数に変換をかけたい 文字コードの指定をすればうまくいくのでしょうか? もしそうならなんと指定すればいいのでしょうか? 以上よろしくお願いします

    • ベストアンサー
    • Java
  • Shift-JISからUTF-8への変換が出来ません

    初歩的な質問で申し訳ありませんが、大変困っております。ただいまimagettftext()を使って日本語主力したく悪戦苦闘しております。  ページ自体はShift-JISで制作していますのでimagettftext()で日本語を出力する場合はUTF-8へ変換して出力するところまでは知れべていて分かりました。しかしいざmb_convert_encoding()で変換しようとするとなぜかUTF-8へ変換されません。 $str = mb_convert_encoding($str,"UTF-8","SJIS"); print mb_detect_encoding($str);  結果→SJIS しかしこれがEUC-JPなら変換されます。 $str = mb_convert_encoding($str,"EUC-JP","SJIS"); print mb_detect_encoding($str);  結果→EUC-JP なぜなのか原因が分からなく困っております。 どなたかご教授願いませんでしょうか? よろしくお願い致します。

    • 締切済み
    • PHP
  • 文字コードの変換について

    現在、表示はPHPで文字コードはEUCで表示しています。 そのときには表示できるのですが、 表示したものを、SHIFT-JISにエンコードしてエクセルに表示するときに、文字コードの違いにより表示されないものがあります。 エンコードは $str = mb_convert_encoding($str, "SJIS", "auto"); と行っています。 EUCからSJISに変換するときに、何か特別なことを行う必要があるのでしょうか??

    • ベストアンサー
    • PHP
  • UNICODEとは何なんですか

    Shift-JISからUTF8への切り換えを勧められ、 今、文字コードや改行コードについて調べています。 取り敢えずUTF-8への変換ツールをダウンロードしてきたところです。 それで凄く分からなくなったのですが、 UNICODEって文字コードを国際的に統一しましょうって規格ですよね。 Wikiを見たらUTF-7、UTF8、UTF-16、UTF-32とあって、 更に5や9もあって、UTF-8にもBOM付きだの何だのとありました。 まるっきり統一するぞってやる気が感じられないのですが どうしてこんなに乱立しているのですか? 今後はノーマルのUTF-8(BOMなし)だけを意識すればいいのでしょうか。 以上2点のうち分かる方で結構ですので宜しくお願いします。

  • リダイレクトする時の文字コードをUnicodeに

    現在、VisualStudioで、システムコールの標準出力結果をリダイレクトしてファイルに保存する プログラムを書いています。 _tsystem(command); のような感じで、commandには "hogehoge > hoge.txt"のように入ります。 ※command はTCHAR この出力結果が、Shift-Jisになっているようで、Shift-Jisだと日本語が文字化けせずに表示されるのですが、Unicode UTF-16にすると文字化けしてしまいます。 Unicode UTF-16とかUnicode UTF-8など文字コードを指定してリダイレクトできないのでしょうか。 ちょっと調べてみましたがうまく見つかりませんでした。

  • UNICODEへの文字コード変換

    以下のようにして、 日本語で書かれたファイルを読み込んで、 UNICODEに変換したいのですが、 できません。。。 どこが間違っているのでしょうか?(;;) 元の日本語ファイル「こんにちは」 >>できたファイル「\u3053\u3093\u306b\u3061\u306f」 という風にしたいのですが。。 //FileIOSteramの作成 FileInputStream fis = new FileInputStream(iFile); FileOutputStream fos = new FileOutputStream(oFile); //Stream ラップ InputStreamReader in = new InputStreamReader(fis, "EUC-JP-LINUX"); OutputStreamWriter out = new OutputStreamWriter(fos, "UTF16"); System.out.println(System.getProperty("file.encoding")); //読み込みと書き込み int c; InputStreamReader in = new InputStreamReader(fis, "Unicode"); Writer out = new Writer(fos); while((c = in.read()) != -1){ out.write(c); }

  • mb_http_output()のあと、サーバーにより挙動が違う

    対処はしたのですが、すこし腑に落ちない点があります。 MySQL、PHPすべての文字コードをUTF-8にしています。 しかし携帯がShift-JISなので、出力時に帳尻を合わすためmb_http_output()を使いました。  $str="内容は、METAタグのContentも含め全部UTF-8のHTMLソースです。";  mb_http_output("Shift_JIS");  $str=str_replace('content="text/html; charset=utf-8"','content="text/html; charset=Shift_JIS"',$str);  exit($str); テストサーバーでは正常にShift_JISで表示されました。 携帯でも確認済みです。 しかし実際のサーバー(さくらインターネットのスタンダード)だと 2行目と3行目の間に  mb_convert_encoding($str,'SJIS','UTF-8'); を挟まないとUTF-8のまま出力されてしまいます。 php.iniでmbstring.*はすべて同じ値にしましたが 違いは埋まりませんでした。 環境設定で何が違うと、 このようなことが生じるのでしょうか?

    • ベストアンサー
    • PHP
  • PHPの文字コード変換について

    PHPで mb_convert_encodingを用いて UTF-8で記述されたPHPスクリプトファイルの PHPファイル内の任意の文字列の文字コードを変換する場合、 $value = "文字列"; $str = mb_convert_encoding($value ,"UTF8","UTF8"); print $str; この場合、特に問題なく、変換がおこなわれます というか、意味のないで処理ではありますが。 次に $str = mb_convert_encoding($value,"EUC-JP","EUC-JP"); とした場合 うまく文字列の文字コードの変換がおこなわれず 出力内容は文字化けします。 次に $str = mb_convert_encoding($value,"SJIS","SJIS"); とした場合 EUC-JPと同じく文字コード変換に失敗し 文字化けするだろうとおもいましたが おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。 これはどういう現象でしょうか? たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として 変換されせるのですから、問題ないはずです。結果問題ありません。 二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして EUC-JPという文字コードに変換しなさいという命令ですよね? これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが 三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。 これはいったいどういう事なのでしょうか? これが仮に $str = mb_convert_encoding($value,"SJIS","UTF-8"); なら話は簡単んです。 UTF-8で記述されたファイルの任意の文字列を UTF8からSJISに変換しようとしているのですから問題なく SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。 こ乃原因をご存知のかたよろしくご教授ください。 お願い致します。

    • ベストアンサー
    • PHP