• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:携帯電話の絵文字とURLエンコード/デコードについて)

携帯電話の絵文字とURLエンコード/デコードについて

このQ&Aのポイント
  • 携帯電話の絵文字とURLエンコード/デコードについて調査中の開発者です。
  • PHPとJavaの間でURLエンコードされたクエリー文字列を受け取り、URLデコードする際に携帯電話の絵文字が文字化けする問題について困っています。
  • 通常の文字列に関しては問題なく処理できているので、絵文字の問題だけが残っています。解決策をご存じの方は教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

デコードした結果をJavaのStringにしていますか? Javaは内部文字コードとしてUnicodeを使っています。携帯電話の絵文字はUnicodeに含まれていないために、Stringに変換する際に絵文字が「?」で置換されてしまっているのだと思います。 Stringに変換している限りはこれは避けられないので、Stringに変換せずにbyteの配列として扱うしかないでしょう。 org.apache.commons.codec.net.URLCodecにはbyte[]を受け取ってbyte[]を返すdecode()メソッドがあるのでそれを使ってください。

spring_is_come
質問者

お礼

ご返答ありがとうございます。 いろいろと実験してみましたところ、Java実行環境に“Shift_JIS”と明記して使用した場合、携帯電話の絵文字のみならず、よく知られている「機種依存文字」(丸囲みの数字など)も、「Javaの定義するところの」Shift_JISにおいて未定義の外字領域とみなされ、「?」に置き換えられてしまうことが分かりました。 ですので、未定義の外字領域を無視するShift_JISではなく、外字領域を有効とする、Shift_JISの拡張コードである“Windows-31J”を用い、 System.setProperty("file.encoding", "Windows-31J") とJava実行時の環境引数として -Dfile.encoding=Windows-31J を加えることで、String型のまま、絵文字や上記の機種依存文字の問題も解決いたしました。 文字コードに含まれないバイナリを「?」に変換しているのだろう、とのご教唆がヒントになりました。誠にありがとうございました。

関連するQ&A

専門家に質問してみよう