• 締切済み

java6で4バイトUTF-8文字を利用するには?

お世話になります。 現在、java Version6 Update24(日本語版)のJDKを、 Windows7 Pro 32bit SP1内に入れて、 Apache HTTP Server 2.2.19(VC9)、 Apache Tomcat 6.0.32、 PHP 5.3.6(VC9 x86 ts)、 MySQL5.5.12、 Eclipse3.6(Helios) pleiades-All-In-One(Java)、 という開発環境で、 Javaサーブレット、JSP、JavaBeansを利用して、 動的Webアプリを開発中です。 まず最初に、文字コードとしてUTF-8(3バイト以内)で、 上記環境を一通り作成し、SQL文のUPDATE処理等が、 JavaとMySQL間で問題無く動作していることを確認済です。 その状態で、 次に、 UTF-8で4バイトになる文字(JIS X 0213の漢字第3・第4水準の一部が4バイトになる)を、 ためしに、直接JavaサーブレットのdoPostメソッド内へ、 「JIS X 0213(1面)(漢字第3水準)」 Unicode:U+2000B UTF-16 :0xD840 0xDC0B の文字である、"𠀋"を、    ↓ String strTest = "𠀋"; みたいにして、単純に代入するだけのロジックをためしに追加して、 Eclipse3.6でデバッグトレースしてみたところ、 strTest内に対して、上記文字が代入されない状態です。 (UPDATE時には、SQL Exceptionエラーになっています) 現在は、 request.setCharacterEncoding("UTF-8"); という状態ですが、 この"UTF-8"を、 どのような文字コードに変更すれば、 UTF-8で4バイトになる文字(JIS X 0213の漢字第3・第4水準の一部が4バイトになる)を、 Javaで、文字列(String)として利用可能な状態に出来るのでしょうか? (Oracleのサイト   http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/intl/encoding.doc.html  で探しましたが、該当すると思われる文字エンコードが見当たらなかった為・・・) または、他の方法で実現する必要がありましたら、 その方法をぜひ教えてください。 以上、よろしくお願いします。

みんなの回答

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

>この代入直後に、Eclipse3.6(Java)で、 >デバッグトレースして見た >文字列変数strTest内の値が正しく表示されていなかった為、 多分、これもeclipseで正しく表示できないだけです。 ファイルなどに出力して試してみてはどうでしょうか。 String charset = "utf-8"; String strTest = "𠀋"; BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("hoge.txt"),charset)); out.write(strTest); out.close(); とした場合、eclipseでデバッグした際の変数の値には"□□"となってしまいましたが、 ファイルには正しく"𠀋"と出力されていました。

hiroasa21
質問者

お礼

残念ながら、この問題は未解決のままですが、 こちらで実際に必要になる予定は数カ月先の為、 もう少し過ぎてから、 あらためてネットなどで情報収集してみます。 遅くなりましたが、 本当にご回答ありがとうございました。

hiroasa21
質問者

補足

「yamada_g」様 お世話になります。 ご回答ありがとうございます。 私も、eclipseでデバッグした際の変数の値には"□□"となっていましたので、 そこで正しく値がstrTest内に代入出来ていないのが、 障害原因と思っていました。 以下にあらためて、 補足質問を追加で、させていただきますので、 もしよろしかったら、ご回答をお願いします。   ↓ strTestに代入後、 そのままeclipseのデバッグトレースで処理を進めていって、 MySQL5.5.12 (utf8mb4という4バイトUTF-8文字に対応した  文字コードでデータベースおよび、その中の各テーブルを  新たに作成済で、その各テーブル内に対して、  これまで利用してきた3バイト以内のUTF-8文字データを  前もって正常に格納済) に対して、SQLでUPDATEを実施した際にも、 SQL Exceptionエラーが発生している状態です。 なお、Javaサーブレット内(doPostメソッド内)では、 4バイトUTF-8文字に対応した文字コードが、 見当たらない状態のため、これまで通り、 utf8でエンコードを指定している状態です。 javaサーブレット内で、 4バイトUTF-8文字に対応した文字コードで、 エンコードする必要があるようでしたら、 何という文字コード(utf8以外で・・・?)で、 エンコードを指定すれば、 よろしかったでしょうか? それとも、MySQL5.5.12(utf8mb4)側の 問題でしたでしょうか? 以上になります。 よろしくお願いします。

回答No.1

それってJava側の問題? MySQL側の問題じゃないの? http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html

hiroasa21
質問者

お礼

残念ながら、この問題は未解決のままですが、 こちらで実際に必要になる予定は数カ月先の為、 もう少し過ぎてから、 あらためてネットなどで情報収集してみます。 遅くなりましたが、 本当にご回答ありがとうございました。

hiroasa21
質問者

補足

ご回答ありがとうございます。 私の書き方が、わかりずらかったのですが、 今回の質問内容は、 MySQLに接続する前の段階になります。 Javaのサーブレット(doPostメソッド)内において、 文字列変数strTestに対して、 4バイトUTF-8文字を、1文字代入しているだけですが、 この代入直後に、Eclipse3.6(Java)で、 デバッグトレースして見た 文字列変数strTest内の値が正しく表示されていなかった為、 この段階で、正しく表示されるようにする必要があると思っています。 もしかするとJava自体が、このような4バイトUTF-8文字を プログラム内で、取り扱えないような仕様なのでしょうか? (3バイト以内のUTF-8文字は、問題無く取り扱えている状況の為・・・) もしよろしかったら、アドバイスいただけましたら幸いです。 よろしくお願いします。

関連するQ&A