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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

文字コード

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

1395閲覧

Javaサーブレットの文字化け

OkukawaRyoki

総合スコア16

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

文字コード

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2020/05/19 15:15

前提・実現したいこと

getParameterNamesメソッドを使用し取得したパラメータの一覧を出力すると文字化けしてしまうので改善したいです。
よろしくお願い致します

コンパイル後のローカルホストでの出力例

count=[Ljava.lang.String;@73e95623 seat=[Ljava.lang.String;@6a2db2ac option=[Ljava.lang.String;@339af7de

該当のソースコード

Servlet

1protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 response.setContentType("text/html; charset=UTF-8"); 3 PrintWriter out = response.getWriter(); 4 5 Page.header(out); 6 7 request.setCharacterEncoding("UTF-8"); 8 9 List<String> names=Collections.list(request.getParameterNames()); 10 for(String name :names) { 11 12 String[] values=request.getParameterValues(name); 13 out.println("<p>"+name+"="+values+"</p>"); 14 } 15 Page.footer(out);

試したこと

自分で調べてダンプ(Arrays.toString)なども試しましたがエラーが起きてしまいます。

補足情報(FW/ツールのバージョンなど)

環境:eclipse
OpenJdk11 orretto
Tomcat9
javaの基本構文を一通り終え、servletに手を出している初学者です。
何か必要情報他にあれば随時更新いたします。

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

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

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

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

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

momon-ga

2020/05/19 15:26

文字化けでなく、配列を表示しているようですが、Arrays.toStringで解決すると思いますので、どう試したか記載してもらえないでしょうか。
OkukawaRyoki

2020/05/19 15:51

momon-gaさん 返信ありがとうございます! 調べて自己解決してしまったのですが、Arrays.asListを使用するとうまく行きました。Arrays.asListは配列をリストに格納するときに用いられるという認識だったので今回はリストを宣言していたため使用していなかったのですが何故なのでしょう、、、
m.ts10806

2020/05/19 20:50

過去質問にも頻出です。調べましょう。 (調べたことは具体的に記載しないと他者には何も伝わりません)
OkukawaRyoki

2020/05/20 00:09

m.ts10806様ありがとうございます。 もっとしっかり調べてから質問することを意識していきます!
guest

回答2

0

自己解決してますが、

Arrays.asListは配列要素をリストに格納するものだとしか認識していなかった

※asLineでなく、asListに修正しています。
とのことですが、認識はあっていますが、誤解もあるようです。

Arrays.asListの戻り値はListです。Stringではありません。

ですが、toStringが要素を表示する実装がされているListを返すので
System.out.printlnに渡したさいに期待の結果(元の配列の中身を表示するよう)になっています。

java

1String[] values = {"ho", "ge"}; 2System.out.println(values); // 文字化け(ではないです) 3 4// これでOK 5System.out.println(java.util.Arrays.toString(values)); 6 7// 自己解決での提示 8System.out.println(java.util.Arrays.asList(values)); 9 10// asListは以下のようなもの、つまりListのtoStringが呼ばれている 11java.util.List<String> ls = new java.util.ArrayList<>(); 12ls.add("ho"); 13ls.add("ge"); 14System.out.println(ls); // Listの中身が表示される 15

投稿2020/05/20 01:21

momon-ga

総合スコア4820

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

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

OkukawaRyoki

2020/05/25 03:53

momon-ga様 返信遅れてしまい申し訳ございません。ありがとうございます。とても勉強になります。 今後とも機会があればよろしくお願い致します。
guest

0

自己解決

今回は問題は出力にArrays.asListを加えることでとりあえず解決しました。

Servlet

1out.println("<p>"+name+"="+values+"</p>");//これじゃ駄目 2out.println("<p>"+Arrays.asList(name)+"="+Arrays.asList(values)+"</p>");//これで良いみたい

Arrays.asLineは配列要素をリストに格納するものだとしか認識していなかったんで勉強になりました。
toStringはプリミティブ型では有効なのかな??勉強が足りてないので頑張ります。

投稿2020/05/20 00:01

OkukawaRyoki

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問