- PR -

サーブレットで文字化け

投稿者投稿内容
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-06-05 11:27
MySQLって接続文字列の後ろの部分で文字コード設定するんじゃなかったでしたっけ?
コード:
jdbc:mysql://host:port/db?useUnicode=true&characterEncoding=SJIS



ここのページがわかりやすいかな。
http://www.dear-jpn.com/dear/wiki.cgi?page=MySQL+%A4%C8+Java
and1
会議室デビュー日: 2007/05/27
投稿数: 13
投稿日時: 2007-06-09 11:45
nagise様 ご回答ありがとうございます。

>MySQLって接続文字列の後ろの部分で文字コード設定するんじゃなかったでしたっけ?

DriverManager.getConnectionを用いるとできると思いますよ。

APIのURL:
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/sql/DriverManager.html#getConnection(java.lang.String,%20java.util.Properties)


途中経過を報告します。
結論から言うとまだ、問題解決できません。

@char_test.javaの
stmt = con.createStatement();と
int kekka = stmt.executeUpdate(sql);の間に
以下のコードを追加してDBに登録する値をテキストファイルに書き出したところ
?と表示されました。DBに登録する以前に文字化けしてしまったことがわかりました。


//testStrの値を書き出し
FileWriter fw = new FileWriter("kiroku.txt");
BufferedWriter bw = new BufferedWriter(fw);
String buff = testStr;
bw.write(buff);
bw.newLine();
bw.flush();
bw.close();
fw.close();

コンパイルの仕方が悪いのでしょうか。

char_test.javaをFTPでサーバーに転送し
LANG=ja_JP.Shift_JIS javac char_test.java
というコンパイルしても見ましたが、文字化けはまだ直りません。
アドバイスいただけないでしょうかよろしくお願いします。

ADBに直接日本語入力できません。
 管理者の方もまだ原因がわからないようです。


[ メッセージ編集済み 編集者: and1 編集日時 2007-06-10 09:56 ]
and1
会議室デビュー日: 2007/05/27
投稿数: 13
投稿日時: 2007-06-09 13:09
and1です。

追記ですが
以下の方法で試してもだめでした。

1.char_test.javaをEUC-JPで保存
2.javac -encoding EUC_JP char_test.java とコンパイル
3.FTPでchar_test.classをサーバーに転送
結果:char_test.classを実行しても文字化けは直りませんでした。
朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-06-09 17:31
ソースの文字コードを変更したぐらいで変わるなら・・

MySQLクライアントから \s 実行して結果を書いてみ
and1
会議室デビュー日: 2007/05/27
投稿数: 13
投稿日時: 2007-06-10 10:22
杏様
ご回答ありがとうございます。

\\sを実行しました。
何かわかりましたら、教えてください。
よろしくお願いします。

------------status実行結果------------

Connection id: ****
Current database: DB名
Current user: アカウント名@localhost
SSL: Not in use
Current pager: less
Using outfile: ''
Using delimiter: ;
Server version: 4.1.18-log
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: sjis
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /tmp/mysql.sock
Uptime: 5 days 8 hours 47 min 12 sec

-----------------------------------------------------
朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-06-10 11:59
MySQLの文字コードの誤認が発生してるかも
http://oss.timedia.co.jp/show/MySQL%C6%FC%CB%DC%B8%EC%A4%CE%CE%B9/%C0%DC%C2%B3%A5%AD%A5%E3%A5%E9%A5%AF%A5%BF%A5%BB%A5%C3%A5%C8%A4%CE%CA%D1%B9%B9
↑が参考になるかも
and1
会議室デビュー日: 2007/05/27
投稿数: 13
投稿日時: 2007-06-10 16:25
杏様
早速のご回答ありがとうございます。

途中経過を報告します。

問題A DB登録
直接入力ではなくバッチ処理を使うと
直接DBに日本語文字を登録できました(select文で確認)。

しかし、show_test.classによってブラウザに登録データを表示しようとしても
相変わらず?で表示されます。

杏様に教えていただいたURLのページを参考に
set names sjisというコマンドを入力して
DBに日本語入力してshow_test.classを実行してみましたが
相変わらず?と表示されてしまいます。

問題がいくつかありますが、
少しでもわかることがありましたら
ご回答よろしくお願いします。
朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-06-10 18:08
DB直接登録できたのであれば SET NAMES以外のもうひとつのは試す必要はありまん。
HttpServletResponse#setCharacterEncoding(java.lang.String)の設定は現在していますか?

スキルアップ/キャリアアップ(JOB@IT)