こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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>
#『た』の部分が『??』となります

対応方法をご存知でしたら教えて下さい

//

投稿日時 - 2005-01-31 18:21:59

QNo.1195116

3rd

困ってます

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

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

投稿日時 - 2005-01-31 19:43:50

補足

長文失礼します。
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変換して処理をすすめる必要がありそうに思いました。

//

投稿日時 - 2005-02-02 19:03:17

お礼

早速のご返信感謝致します。

早速、ご指摘頂けました内容で確認をしてみました。

投稿日時 - 2005-02-02 16:30:20

あなたにオススメの質問