• 締切済み
  • すぐに回答を!

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  で探しましたが、該当すると思われる文字エンコードが見当たらなかった為・・・) または、他の方法で実現する必要がありましたら、 その方法をぜひ教えてください。 以上、よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数2068
  • ありがとう数2

みんなの回答

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

「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)側の 問題でしたでしょうか? 以上になります。 よろしくお願いします。

関連するQ&A

  • 4バイトUTF-8文字でUPDATEするには?

    お世話になります。 Windows7 Pro 32bit SP1内に、 MySQL Ver5.5.12と、 phpMyAdmin Ver3.3.10.1を入れています。 (ほかに、  Apache HTTP Server 2.2.19(VC9)、  Apache Tomcat 6.0.32、  PHP 5.3.6(VC9 x86 ts)、  Eclipse3.6(Helios) pleiades-All-In-One(Java)なども) この開発環境で、 phpMyAdminを開いて、 文字コードとしてUTF-8(3バイト以内の文字)では、 SQL文のUPDATE処理等が、 問題無く動作していることを確認済です。 そこで、質問内容ですが、 UTF-8で4バイトになる文字(JIS X 0213の漢字第3・第4水準の一部が4バイトになる)、 「JIS X 0213(1面)(漢字第3水準)」 Unicode:U+2000B UTF-16 :0xD840 0xDC0B の文字である、"𠀋"を、    ↓ phpMyAdminを開いて、これまで3バイトまでのUTF-8文字と同様に、 1つのVARCHAR属性フィールドに対して、 𠀋 と手入力して、 phpMyAdminの[実行する]ボタンをクリックして、 UPDATEしてみたところ、 登録された文字列が、"????"として更新されてしまいます。 これを、正しい文字 𠀋 として更新されるようにするには、 どのような対応をすれば、よろしかったでしょうか? なお、現在、 コマンドで、 SHOW VARIABLES LIKE 'char%'; を実行すると、 以下のような表示がされている状態です。   ↓ character_set_client    :utf8mb4 character_set_connection :utf8mb4 character_set_database  :utf8mb4 character_set_filesystem :binary character_set_results   :utf8mb4 character_set_server   :utf8mb4 character_set_system   :utf8 character_set_dir      :D:\mysql\share\charsets\ 以上になります。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 文字コードについて(どのファイルをどの文字コードにしてWeb開発を進めていくべきか)

    【疑問の背景】 文字コードについて(どのファイルをどの文字コードにしてWeb開発を進めていくべきか)   国際標準で使われているUTF-8で統一しておけば問題はないだろうと思って開発を進めていると・・・   UTF-8は「日本語が2~4バイト」で扱われるという、バイトの扱いが厄介であるため、   できればJavaでのUTF-8で開発は避けたい、だから「Shift-JIS」にしておきたいという話があがり、   各々のファイルにどの文字コードを設定すれば良いのかがわからなくなっている状態です。    いくつかの疑問がでていまして  判る範囲で構いませんので文字コード設定の判断についてのアドバイスいただけませんでしょうか? 【現在の開発文字コード】 HTMLファイル: UTF-8 JSPファイル: UTF-8 Javaファイル(servlet): UTF-8 Javaファイル(Bean): UTF-8 Javaファイル(JSPから出来たサーブレット): UTF-8 データベース: UTF-8 【設定したい今後の予定文字コード】 HTMLファイル: UTF-8 JSPファイル: UTF-8 Javaファイル(servlet): Shift-JIS Javaファイル(Bean): Shift-JIS Javaファイル(JSPから出来たサーブレット): Shift-JIS データベース: UTF-8 【疑問1】 javaファイル(servlet,Bean)をどのコードにすべきかについて  全てS-JISにした方がいいのか、UTF-8にした方がいいのかどうあるべきなのでしょうか?  (UTF-8 で 「日本語が2~4バイト」として扱われると、どういった弊害が発生するのでしょうか?) 【疑問2】 javaファイルをS-JISに変える方法について  今はサクラエディターというツールで  名前を付けて保存 → 文字コードセット「Shift-JIS」 → 保存 → ファイル名の文字コードセットの変更完了    今はエクスプローラーから直接フォルダの中にあるファイルを触っている状況なのですが、  eclipseから「ファイルの文字コードセットを変更する方法」はありますでしょうか? 【疑問3】 「Shift-JIS」に設定して開発していく必要性について  既存で「utf-8」で設定されているjavaファイルを、「Shift-JIS」に設定して開発していく必要性はあるのでしょうか? (all in one eclipse 3.4 を入れたとき、デフォルトで「utf-8」でjavaファイルが作られるつくりになっているみたいなのですが・・・)   【疑問4】 javaファイル作成時、「Shift-JIS」の形式でファイルを生成する方法について     現在、javaファイルを作成する場合「utf-8」のコードでjavaファイルが生成されるようになっています。      【自作で作成したjavaファイルの場合】    「サクラエディターを使用して、文字コードセットをShift-JISに変更すれば、ずっとShift-JISのファイルの状態」にすることができました。      しかしここで問題が出たのですが      【JSPファイルから自動生成されたjavaファイル(servlet)の場合】    「サクラエディターを使って、Shift-JISに変更した後に、JSPファイルを編集すると、また“utf-8に戻ってしまう” 状態」です。    現状としては「JavaファイルはShift-JISに統一して欲しい」という要望なので、    JSPから自動生成されたjavaファイルが "utf-8" になってしまいます。      JSPから自動生成されたjavaファイルを    "常にShift-JISに設定する" 方法はありますでしょうか?     【環境】  OS   ・WindowsXP Pro    java開発環境   ・all in one eclipse(3.4)   ・TomCat(6.0)   ・Java JRE(1.6)   ・MySQL(5.0)

    • ベストアンサー
    • Java
  • 「シフトJIS X 0213」形式の文字コードチェック

    Javaにて「シフトJIS X 0213」で定められている下記の文字を判断したいです。 (参照: http://www.eonet.ne.jp/~kotobukispace/ddt/jisx0213/sjis8xxx.html) ・第3水準 ・第4水準 ・予約 ・使用不可 実現方法としては、文字列を「シフトJIS X 0213」にエンコードして、 エンコードした文字のバイトを判断するのが妥当だと思いますが、 Javaにて「シフトJIS X 0213」にエンコードすることは可能でしょうか。 sunの「サポートされているエンコーディング」の一覧を見ても「シフトJIS X 0213」 はサポートされていないように見受けられます。 (参照: http://www.ingrid.org/java/i18n/encoding/) 仮に「シフトJIS X 0213」にエンコード出来ない場合、 他の方法にて実現する方法等ありましたらご教授願います。 【動作環境】 OS:Windows Vista Business JRE:1.5.0_10

    • ベストアンサー
    • Java
  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

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

関連するQ&A

  • html + php 文字化けの問題【utf-8】

    文字化けが直りません。どうしたらいいでしょうか? phpとmysqlをつかってデータベース表示させるページなのですが、データベースの文字コードがutf-8なのでphpファイルの文字コードをeucからutf-8に変更しました。そうするとデータベースは正常に表示されるのですが、htmlの部分は全て「?」になってしまいます。 文字コードの変換はEmEditorで変更し、変化が見られなかったので、変換用のフリーソフトを使ってみましたが、やっぱり文字化けの状態です。どなたかご教授ください。お願いします。

    • 締切済み
    • PHP
  • Java,Javaスクリプト、エクリプス、Tomcat,MySQLとは何ですか?

    Java,Javaスクリプト、Eclipse、Tomcat,MySQLとは何ですか? 誰かそれぞれ詳しく教えてください。 1.Javaとは何か? 2.JavaスクリプトとJavaの違いは? 3.Eclipseとは何か? 4.TomcatとJavaにはどのような関係があるんですか? 5.MySQLとSQLとは何か?

  • 文字列のバイト数を取得したい

    処理中に渡ってくる文字列のバイト数を取得したいのですが、 そういった関数はありませんでしょうか? 探しても見つかりませんでした。 文字列はUTF-8かSJISで渡ってきますので、両方に 対応していると嬉しいです。 対応していなければ渡ってくる前に文字コードを 変換します。 どなたかご教示下さい。

    • ベストアンサー
    • PHP
  • mysql→EUC-JP、php→UTF-8の時の文字コード変換箇所について。

    こんにちわ。 現在xreaのサーバーを使っているのですが、私が借りている サーバーはmysqlの文字コードがEUC-JPで固定されており、 WebページはUTF-8で書いている為、データを取り込む時、 上げる時共に文字化けしています。 色々試行錯誤したのですが、エラーが出てしまいうまくいきません。 そこで、このような環境の時はどの部分で、文字コードの変換処理を すればいいのでしょうか? (SQL文で行うべきか、PHP文で行うべきか、それともお互いで処理するべきか。) サーバー環境は以下です。 Apache 1.3.37 PHP 5.1.4 MySQL 4.0.26 よろしくお願いします。

    • ベストアンサー
    • PHP
  • UTF-8での保存について

     エディットボックスに入力してある日本語の文字列をUTF-8やUTF-8Nでテキストファイルに保存したのですがうまくいきません。  UTF-8の場合はファイルの先頭に3バイトのBOMをつければいいらしいので、 ファイルの先頭に0xEF,0xBB,0xBFの3バイトを追加してテキストファイルに保存しましたがメモ帳で開くと文字化けします(メモ帳で開くときは文字コードをUTF-8にして開いてます)。 作成したテキストファイルをバイナリエディタで開いてみると先頭の3バイトはEFBBBFとなっているので何も問題はないと思うのですが、どうして文字化けするファイルができてしまうのでしょうか? --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

  • StatementクラスのexecuteQueryメソッドを使用したSQLの発行について

    StatementクラスのexecuteQueryメソッドを使用したSQLの発行について教えてください。 JavaでMySQLのデータベースからデータを取得するため、 executeQueryメソッドを使用してSQLの発行を行ったのですが、select文が正常に実行されずに困っています。(where句の条件が引っかからずに困っています。) 【前提】 ・カラム「name」の値に「name(nameという文字)」が入っている状態。 ・INT型、CHAR型で定義されたカラムの値は取得できる ・VARCHAR型で定義された、カラムの値が取得できない 【状況】  VARCHAR型で定義された、カラムの値が取得できない場合というのが、java側で、  stmt.executeQuery("SELECT * from customer where name='name'") というようにSQL文を発行した場合です。  MySQLのコマンドプロンプトからダイレクトに投げた場合や、  またDBViewerを使用した場合は、Where句の「name='name'」で引っかかったデータが正常に返ってくるのですが、  Javaから発行した場合のみ「VARCHAR型で定義されているカラムの値が取れない」という状況なのです。  (考えられることとしては、SQL発行時「SELECT * from customer where name='name'」 の 「'name'」が、別の何かに変わっているのかな?(文字コードなどが関係しているのか?)など考えているのですが、解決できず困っております。)   一体どこに問題があるのでしょうか?   (CHAR型、INT型のデータは正常にJava側で読めるのに、VARCHAR型の値をwhere句にした場合に限って、正常にデータ抽出できない、という点が腑に落ちないのですが・・・ SQLエラーを吐く訳ではなく、抽出条件が成立していない形なのです)   【実行環境】 ・Windows XP Pro ・eclipse3.4(all in one eclipse) ・Java1.6 ・TomCat6.0 ・MySQL5.0 (文字コード:UTF-8)

    • ベストアンサー
    • Java
  • C言語でUTF-8コードで読み込んで表示は日本語にしたい

    C言語で、外部ファイルからバイナリ形式でUTF-8の文字コード、 たとえば「E38182」だと「あ」になりますけど、「E38182」を読み込んで画面では「あ」と表示したいのですが、これはどのようにすれば一番カンタンに出来るのでしょうか? 最終的に第一水準文字はすべて置き換える予定なので、なるべく手間のかからない方法をとりたいと考えています。 ちなみに、ソースにはそのまま「あ」と入力すれば「あ」と表示される環境にあります。 よろしくお願いします。

  • javaの文字コードについて

    いつもお世話になっております。 webで入れられた文字列に全角が含まれるか判定したいのですが、 文字コードについて質問させてください。 javaは標準では、String型は標準ではunicodeだと思うのですが、 これはutf-8なのでしょうか。utf-16なのでしょうか。 試しに以下のように"A"の文字をbyteに変換してみたところ、 String strTest = "A"; byte[] bbb = strTest.getBytes(); for(int i = 0 ; i < bbb.length ; i++){ System.out.println(bbb[i]); } "65"という結果が返ってきました。 http://ash.jp/code/unitbl1.htm 等文字コード表を見ると、"A"は"41"と定義されており、なぜ"65"が返ってくるのでしょうか。 変な質問ですいません。 関係無いと思いますが、ソースはS-JIS、windwos環境で実行しています。 よろしくお願いします。

    • ベストアンサー
    • Java
  • ExcelVBAマクロでの文字コード出力について確

    ExcelVBAマクロでの文字コード出力について確認させてください。 ExcelでA列から行方向に漢字、記号(環境依存文字も含む)のデータが1文字ずつ入力されてあります。これをExcelVBAマクロにより、B列にShift_JISの文字コード、C列にJIS X 0213の文字コードに変換して表示することは可能でしょうか。 例えばIMEパッドで「亜」の文字コードはShift_JISでは"889F"、JIS X 0213では"1-16-1"ですがこの文字コードをB列、C列にそれぞれ表示させたいです。 またその他のいい方法があればご教授いただけますでしょうか。 以上、よろしくお願いいたします。

  • 「Eclipse PDT」で文字化けを直す設定を失念。お助けを

    「Eclipse PDT」を使っていて、phpも含めてすべてのファイルをUTF-8で書いています。 で、問題ないはずだったのですが、さっき、phpファイルを「Eclipse PDT」で開いたら文字化けしていました。 で、秀丸でそのファイルを開いたら、UTF-8でした。 というところで、「Eclipse PDT」の文字コード設定をいつのまにかいじってしまったのかな・・・と思ったのですが、 それがどこにあるか忘れてしまいました。 どなたかご存じの方いらっしゃいましたら、おおしえくださいませ。

    • 締切済み
    • PHP