• 締切済み

PHPからJavaを呼ぶと2バイト文字が文字化けします

Linux+PHP4 にてJava 1.4.2のライブラリーを呼ぶと 2バイト文字が ?? となって処理されてしまいます <例> <?php $J_String = new Java('java.lang.String',"aたbcdefg"); print $J_String->length()."<br>" ; print $J_String->substring(0,4)."<br>" ; ?> を実行すると下記が返ってきます 9<br>a??b<br> #『た』の部分が『??』となります 対応方法をご存知でしたら教えて下さい //

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 java.lang.StringはUNICODEだ。なのでPHPから文字を入れ込むときにはUTF-8などの形式で文字列を記述する必要がある。  対処方法はPHPを全てUTF-8で記述する、jcode.phpで文字コードを変換してから渡す、などがあるかな。  java.lang.Byte列として読み込んでjava側で文字コード変換してやっても良いが、それなら最初からjavaを使う意味が無いような気がする。javaで自作クラスを作ってそれをphpから使うなら別だが。

3rd
質問者

お礼

早速のご返信感謝致します。 早速、ご指摘頂けました内容で確認をしてみました。

3rd
質問者

補足

長文失礼します。 EUC→JIS、EUC→UTF-8変換した2バイト文字をPHPからJavaへ渡し処理をした結果を載せさせて頂きます。 不備が御座いましたら、ご指摘頂ければ幸いです。 jcode.phpは下記のものを利用させて頂きました http://www.spencernetwork.org/ → 漢字コード変換 ◆確認ソース <?php require("./jcode.php"); include("./code_table.jis2ucs"); $string ="てすと"; print "AutoDetect:".AutoDetect($string)."<br><br>"; print "<hr>" ; $JIS_String = JcodeConvert($string, 1, 3) ; print "AutoDetect:".AutoDetect($JIS_String)."<br>"; print $JIS_String."<br>" ; $J_String = new Java('java.lang.String',$JIS_String); print $J_String->length()."<br>" ; print $J_String->toString()."<br>" ; print "<hr>" ; $UTF8_String = JcodeConvert($string, 1, 4) ; print "AutoDetect:".AutoDetect($UTF8_String)."<br>"; print $UTF8_String."<br>" ; $J_String = new Java('java.lang.String',$UTF8_String); print $J_String->length()."<br>" ; print $J_String->toString()."<br>" ; print "<hr>" ; ?> ◆処理の内容 EUC の 『てすと』文字列をJIS、UTF-8変換した後 ・コード確認 ・変換後の文字表示 ・Javaで受け取った文字の長さ表示 ・Javaで受け取った文字表示 をしています。 実行結果は下記の通りでした AutoDetect:1 -------------------------------------------------------------------------------- AutoDetect:3 てすと 12 てすと -------------------------------------------------------------------------------- AutoDetect:4 縺ヲ縺吶→ 9 ????????? *** AutoDetect の 1はEUC、3はJIS、4はUTF-8を表しています ◆結果 JISで渡した場合は、ほぼ期待通りの動きになりました。 『てすと』はJISコードで12バイトとなります。 UTF-8で渡した場合は、?が9文字で処理されていました。 PHPからJavaのライブラリを利用するには、JISで渡してやって Java内部でUTF-8変換して処理をすすめる必要がありそうに思いました。 //

関連するQ&A