🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

1回答

7371閲覧

getParameterでブラウザから受け取った文字列が文字化けするのを解決したい。

rigomammo

総合スコア5

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2020/11/30 06:19

Strutsのフレームワークを使用して、Javaでデータベースの検索機能を実装しています。

検索画面

画像のように「田中」と入力した際に、getParameterで受け取ると「逕ー荳ュ」と文字化けしてしまいます。

一通りWebで調べて試しましたが、どれもうまくいかない上に何が有効な解決方法なのかもわからなくなる始末です。
まずはコンソールに「田中」と表示させたいのですが、何かいい設定方法はございますでしょうか。

下記にコードを掲載させていただきます

Java

1package search.action; 2 3import java.nio.charset.StandardCharsets; 4import java.util.List; 5 6import javax.servlet.http.HttpServletRequest; 7import javax.servlet.http.HttpServletResponse; 8import javax.servlet.http.HttpSession; 9 10import org.apache.struts.action.Action; 11import org.apache.struts.action.ActionError; 12import org.apache.struts.action.ActionErrors; 13import org.apache.struts.action.ActionForm; 14import org.apache.struts.action.ActionForward; 15import org.apache.struts.action.ActionMapping; 16 17import dao.B14_DBAccess; 18import search.actionForm.SearchActionForm; 19 20public final class SearchAction extends Action{ 21 @SuppressWarnings("deprecation") 22 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ 23 24 request.setCharacterEncoding("UTF-8"); 25 response.setContentType("text/html; charset=UTF-8"); 26 27 28 29 //ActionFormを取得する 30 SearchActionForm search = (SearchActionForm)form; 31 32 HttpSession session = request.getSession(); 33 ActionErrors errors = new ActionErrors(); 34 35 DBAccess db = new DBAccess(); 36 37 String sql = "select * from user"; 38 39 String inputId = request.getParameter("id"); 40 String inputName = request.getParameter("name"); 41 String inputKana = request.getParameter("kana"); 42 43 44 System.out.println(inputName); 45 inputName = new String(inputName.getBytes(StandardCharsets.UTF_8)); 46 db.connect(); 47 48 db.commit(); 49 50 //NAME欄に入力がある場合 51 if(inputName != null) { 52 sql = sql + " where name like '%" + inputName + "%'"; 53 } 54 55 List<String> str = db.selectExec(sql); 56 57 session.setAttribute("oldData", str); 58 saveErrors(request, errors); 59 return (mapping.findForward("success")); 60 61 } 62} 63

足りない情報がありましたらお申しつけください。
以上、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

念のため、
入力画面のpageディレクティブのcharsetや、pageEncodingはUTF-8になっていることを
確認した上で
ソースのエンコーディングはUTF-8になってますか?

投稿2020/11/30 06:39

Takeshi_Ueda

総合スコア183

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

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

Takeshi_Ueda

2020/11/30 06:44

田中(UTF-8) ⇒ 逕ー荳ュ (ShiftJIS)ですので どこかでShiftJISになってるはずです。
rigomammo

2020/11/30 06:59

早速のご回答ありがとうございます。 入力画面はSearch.jspになりますが、 <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.io.*, java.util.*, java.text.*"%> <% request.setCharacterEncoding("UTF-8"); session.getAttribute("oldData"); %> 上記を最上部に記述しております。 eclipseを使用しているのですが、 ソースのエンコードの確認はどのように確認すればよろしいでしょうか。。 初歩的な質問で申し訳ございません。
rigomammo

2020/11/30 07:00

なるほど、SHIFT-JISの文字化けなんですね! 様々なファイルのプロパティからエンコードを確認したのですが、今のところSHIFT-JISは見つかってないです。。
Takeshi_Ueda

2020/11/30 07:03

eclipseのプロジェクトを選択⇒右クリックから「プロパティ」を選択⇒リソース欄の「テキストファイルエンコード」を参照
Takeshi_Ueda

2020/11/30 07:05

あとは、eclipseで該当のソースを開いた時の右下に文字コードが表示されます。
rigomammo

2020/11/30 07:10

ありがとうございます! 「テキストファイルのエンコード」を確認したところ、UTF-8でした。 Shift-JISの文字化けとのことで、下記の記述で文字コードを変更してみたら文字化けが直りました!! inputName = new String(inputName.getBytes("Shift_JIS"), "UTF-8"); 大変ありがとうございます!!
Takeshi_Ueda

2020/11/30 07:11

解消したならよかったです
rigomammo

2020/11/30 07:14

文字化けしている文字コードを教えていただけたことが解決につながりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問