- - PR -
データベースに日本語登録で文字化け
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-06-24 21:15
こんにちは、いつもお世話になっております。
and1です。 「サーブレットで文字化け」 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38835&forum=12&19 で質問の続きです。 もう一度、問題点を整理して質問し直したいと思います。 データベースの日本語文字データをブラウザに表示させることはできたのですが データベースへ日本語文字を登録することができません。 どうすれば、文字化けせず日本語文字をDBに登録できるでしょうか? ご回答よろしくお願いします。 ●手順 @char_test.htmlで "登録"ボタンを押下する。 Achar_test.classによって DBに"あ"という文字列を登録する。 BDBにログインし、select文で"あ"が登録されているか確認 結果:"?"が登録されている。 ちなみにDBにおける文字コードの設定は以下のとおりです。 Server characterset: latin1 Db characterset: sjis Client characterset: latin1 Conn. characterset: latin1 ※DBへ直接日本語をinsertすることは可能です。 また、テキストファイルに変数testStrを 出力すると以下のようになりました。 コードa)--------------------------------------------------------- FileWriter fw = new FileWriter("kiroku.txt"); BufferedWriter bw = new BufferedWriter(osw); String buff = testStr; bw.write(buff); bw.newLine(); bw.flush(); bw.close(); fw.close(); コードb)--------------------------------------------------------- FileOutputStream os = new FileOutputStream("kiroku.txt"); OutputStreamWriter osw = new OutputStreamWriter(os, "Shift_JIS"); BufferedWriter bw = new BufferedWriter(osw); String buff = testStr; bw.write(buff); bw.newLine(); bw.flush(); bw.close(); osw.close(); os.close(); 【出力結果】 コードa ? コードb あ ●本番環境 OS:FreeBSD データベース:MYSQL 4.1.18 TOMCAT:4.1.31 ●テスト環境 OS:WindowsXP データベース:MYSQL 4.1.21 TOMCAT:5.0.28 ●コード(補足) ================test.jsp================ <%@ page contentType="text/html; charset=Shift_JIS" pageEncoding="Shift_JIS" %> <% request.setCharacterEncoding("Shift_JIS"); %> <html> <body> ”あ”をDBに登録<BR> <form action="char_test" method="post" > <input type="submit" value="登録"> </form> </body> </html> ================char_test.java================ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import javax.servlet.ServletContext; import javax.servlet.RequestDispatcher; import java.io.*; import java.sql.*; import java.util.*; public class char_test extends HttpServlet { String testStr="あ"; testStr = new String(testStr.getBytes("8859_1"),"Shift_JIS"); Connection con = null; Statement stmt = null; Exception exception; public void doPost( HttpServletRequest req, HttpServletResponse res ) throws ServletException, IOException { try { Class.forName( "com.mysql.jdbc.Driver" ); String jdbcurl = "jdbc:mysql://localhost/DB名"; Properties props = new Properties(); props.put("user", "root"); props.put("password", "パスワード"); props.put("useUnicode", "true"); props.put("characterEncoding", "Shift_JIS"); con = DriverManager.getConnection( jdbcurl, props ); String sql="insert into test_tb(input_str) values('"+testStr+"')"; stmt = con.createStatement(); int kekka = stmt.executeUpdate(sql); String target = "/test.jsp"; ServletContext context = getServletContext(); RequestDispatcher rd = context.getRequestDispatcher( target ); rd.forward( req, res ); } catch(Exception e) { req.setAttribute( "msg", e ); String target = "/Error.jsp"; ServletContext context = getServletContext(); RequestDispatcher rd = context.getRequestDispatcher( target ); rd.forward( req, res ); } } } |
|
投稿日時: 2007-06-25 08:17
前回の教訓身になってない(汗
どの時点で文字化けしているか確認してください 文字化けはなぜ起きるか確認してください この確認とソースを見比べれば答えはでます |
1