質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

3回答

8470閲覧

日本語を入力すると文字化けしてしまいます。

kasotama

総合スコア35

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2016/02/01 08:33

###前提・実現したいこと
まずWeb上でformに入力した本のタイトル(文字列)をjspからservletに送ります。
次に、そのデータをmysqlのデータベースに登録します。
最後に、データベースから登録したデータをすべて取ってきて、Web画面上に表示します。
ということがやりたいです。

###発生している問題・エラーメッセージ
本のタイトルを「java」のように英数字で入力する分には問題ないのですが、「データベース」のように日本語で入力すると文字化けしてしまいます。
コマンドプロンプトからSQL文を使って直接データベースに登録すると文字化けは起こりませんでした。
###ソースコード

java

1try{ 2 //DAOオブジェクト宣言 3 BookDAO objDao=new BookDAO(); 4 //DTOオブジェクト宣言 5 Book book=new Book(); 6 //文字エンコーディングの指定 7 request.setCharacterEncoding("Windows-31J"); 8 9 //タイトルの取得 10 String title=request.getParameter("title"); 11 if(title.equals("")){ 12 error="タイトルが未入力の為、書籍登録処理は行えませんでした。"; 13 return; 14 } 15 book.setTitle(title); 16 //BookDAOクラスに定義したinsert()メソッドを利用して、Bookオブジェクトに格納された書籍データをデータベースに登録 17 objDao.insert(book); 18 19 }

###補足情報(言語/FW/ツール等のバージョンなど)
言語はjavaでeclipse4.5のTomcatを使っています。
プログラミングの勉強を始めて2か月くらいで、ここでの質問も初めてなので何か書き足りないことがあるかもしれません。何かあったら教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

もしかするとMySQLの設定が不十分で、デフォルトの文字コードがまだUTF-8になってない可能性があります。
MySQLにrootログインして文字コードをご確認ください。

MySQL

1mysql > show variables like "char%";

Valueにlatin1があると、それが文字化けの原因かもしれません。

latin1をUTF-8に変える手順は以下のURLが参考になると思います。

MySQL 5.0くらい
参考1
参考2
参考3

MySQL 5.5 以降
参考4

多くの人がMySQLの文字化けに悩まされたようで、
「MySQL 日本語」と検索するだけでもこの手の記事がたくさん出てきます。
私もその中の一人です。
質問者さんはすでにご存知かもしれませんが
MySQLに関する設定に触れられてなかったので
もしかすると・・・と思い回答させていただきます。

投稿2016/02/02 00:51

編集2016/02/02 00:59
mankan

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kasotama

2016/02/02 01:34

まさにこれのようです。僕の検索不足でした!ありがとうございます。 上手く変更ができなくてまだ完璧に解決したわけではありませんが、何とかなりそうです。 本当にありがとうございました!
mankan

2016/02/02 09:01

ベストアンサーありがとうございます。 解決への一助になれたようでなによりです。 蛇足ですが、検索について触れたのは、参考URLで不十分だった場合を考えてのものなので、 検索不足を指摘するつもりはありませんでした。 このケースに関しては、原因の特定こそがラスボスなので 検索不足ということは無いと思います。 紛らわしい表現ですみません。
guest

0

文字化けが発生する可能性があるのは、以下でしょうかね。

1.クライアント側 → servlet へ submit したタイミング
2.servlet → DB に登録したタイミング
3.DB → servlet に取り出したタイミング

コマンドプロンプトでDBの中身を覗いてみて、文字化けしていれば1か2ですかね。
逆にDB上は文字化けしていないなら3のタイミングかな・・・。


Javaは最近全然触ってなくてまったく覚えていないのですが・・・
request.setCharacterEncoding("Windows-31J"); の部分は
もしクライアント側(JSP) が utf-8 なら
request.setCharacterEncoding("UTF-8");
とするべき、でしたっけ。

投稿2016/02/01 09:41

sk_3122

総合スコア1126

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kasotama

2016/02/02 00:10

おはようございます。 コマンドプロンプトでDBの中身を覗くとすでに文字化けしていたのでそのようです。 デバッグしてみたところ、request.getParameter("title")で取得した変数titleの中身のところで文字化けしていました。 JSPもWindows-31Jで書いています。念のためrequest.setCharacterEncoding("UTF-8"); と記述してみましたが、今度はtitleの中身が空文字となってしまいました。
sk_3122

2016/02/02 01:14 編集

> request.getParameter("title")で取得した変数titleの中身のところで文字化けしていました。 じゃあ 1 のタイミングなんですかね。 JSPの文字コード定義のところとかはどう書いていますか? 貼りつけてみたら もし間違ってたら誰か指摘してくれるかもしれません。 こんな感じですかね? <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %> あと↑とは別に、 <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> とか書いてますか?ませんか?
guest

0

MySQLは使ったことは無いのですが、文字化けとくれば文字コードじゃないでしょうか?普通はUTF-8だと思うのですが。外していたらすいません。

投稿2016/02/01 08:43

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kasotama

2016/02/02 00:12

おはようございます。 そうなんですね!テキストに"Windows-31J"と書いてあったので何も考えずにそのまま書き写していました。 しかしUTF-8に変えてみたのですがやっぱりうまくいきませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問