みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

締切り済みの質問

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
 で探しましたが、該当すると思われる文字エンコードが見当たらなかった為・・・)

または、他の方法で実現する必要がありましたら、
その方法をぜひ教えてください。

以上、よろしくお願いします。

投稿日時 - 2011-06-02 13:55:46

QNo.6781077

すぐに回答ほしいです

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

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

回答(2)

ANo.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でデバッグした際の変数の値には"□□"となってしまいましたが、
ファイルには正しく"𠀋"と出力されていました。

投稿日時 - 2011-06-03 18:09:19

補足

「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)側の
問題でしたでしょうか?

以上になります。
よろしくお願いします。

投稿日時 - 2011-06-03 19:32:51

お礼

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

遅くなりましたが、
本当にご回答ありがとうございました。

投稿日時 - 2011-06-17 09:47:45

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

投稿日時 - 2011-06-03 04:57:43

補足

ご回答ありがとうございます。

私の書き方が、わかりずらかったのですが、
今回の質問内容は、
MySQLに接続する前の段階になります。

Javaのサーブレット(doPostメソッド)内において、
文字列変数strTestに対して、
4バイトUTF-8文字を、1文字代入しているだけですが、
この代入直後に、Eclipse3.6(Java)で、
デバッグトレースして見た
文字列変数strTest内の値が正しく表示されていなかった為、
この段階で、正しく表示されるようにする必要があると思っています。

もしかするとJava自体が、このような4バイトUTF-8文字を
プログラム内で、取り扱えないような仕様なのでしょうか?
(3バイト以内のUTF-8文字は、問題無く取り扱えている状況の為・・・)

もしよろしかったら、アドバイスいただけましたら幸いです。
よろしくお願いします。

投稿日時 - 2011-06-03 11:43:42

お礼

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

遅くなりましたが、
本当にご回答ありがとうございました。

投稿日時 - 2011-06-17 09:48:10

あなたにオススメの質問