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

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

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

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

サーブレット

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

28839閲覧

サーブレットで文字が「???」になってしまう。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

サーブレット

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2016/01/26 13:59

編集2016/01/26 15:16

タイトルの通りです。おそらくエンコード処理がうまくいってないと思うのですが、どこをどう直したらいいのかわかりません。コードは参考書の通り書いています。

java

1import java.io.*; 2import javax.servlet.*; 3import javax.servlet.http.*; 4 5public class Sample2 extends HttpServlet{ 6 public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException{ 7 try{ 8 String tmp = request.getParameter("cars"); 9 String carname = new String(tmp.getBytes("8859_1"),"JISAutoDetect"); 10 11 response.setContentType("text/html; charset=Shift_JIS"); 12 13 PrintWriter pw = response.getWriter(); 14 pw.println("<html>\n" 15 + "<head><title>\n" + carname 16 + "</title></head>\n" 17 + "<body><center>\n" 18 + "<h2>\n" + carname + "</h2>\n" 19 + carname 20 + "のお買い上げありがとうございました。<br/>\n" 21 + "</center></body>\n" 22 + "</html>\n"); 23 }catch(Exception e){ 24 e.printStackTrace(); 25 } 26 } 27}

html

1<html> 2<head><title>サンプル</title></head> 3<body><center> 4<img src="car.gif"/><br/> 5<h2>ようこそ</h2> 6<hr/> 7お選びください。<br/> 8<br/> 9<form action="http://localhost:8080/YJK/servlet/Sample2" method="GET"> 10<input type="text"name="cars"/> 11<input type="submit" value="送信"/> 12</form> 13</center></body> 14</html>

Sample2.htmlの実行画面↓
イメージ説明
「乗用車」と入力して送信すると・・・↓
イメージ説明
" 乗用車
乗用車のお買い上げありがとうございました。"
となるはずなのですが、ご覧のとおり?????になってしまいます。どうすればいいのでしょうか。


追記
shanxia様の回答を参考に、class Sample2の

response.setContentType("text/html; charset=Shift_JIS");

response.setContentType("text/html;charset=UTF-8");

に変えてみたのですが、上手くいきませんでした…。ただ設定ファイルの方で
encoding="ISO-8859-1"
とあったので、そちらを
encoding="UTF-8"
としてみたところ、下図のようになりました。
イメージ説明
どうやら入力フォームの変換が上手くいってないようです。

Sample2.javaファイルは「UTF-8(BOMなし)」というコードだと思います。「UTF-8」にして
javac -encoding UTF8
でコンパイルしようとすると、一行目で「'\ufeff'は不正な文字です」というエラーが出てコンパイルできないのです。(BOMなしだとコンパイルできる)。

一応設定ファイルも載せておきます。

xml

1<?xml version="1.0" encoding="UTF-8"?> 2 3<web-app xmlns="http://java.sun.com/xml/ns/javaee" 4xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 7version="3.0"> 8 9 <display-name>YasaJava</display-name> 10 <description>YasaJava</description> 11 12 <servlet> 13 <servlet-name>Sample</servlet-name> 14 <servlet-class>Sample</servlet-class> 15 </servlet> 16 17 <servlet-mapping> 18 <servlet-name>Sample</servlet-name> 19 <url-pattern>/servlet/Sample</url-pattern> 20 </servlet-mapping> 21 22 <servlet> 23 <servlet-name>Sample2</servlet-name> 24 <servlet-class>Sample2</servlet-class> 25 </servlet> 26 27 <servlet-mapping> 28 <servlet-name>Sample2</servlet-name> 29 <url-pattern>/servlet/Sample2</url-pattern> 30 </servlet-mapping> 31</web-app>

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

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

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

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

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

guest

回答2

0

ベストアンサー

レスポンスヘッダに、utf-8
ファイルを utf-8 で保存。
jsp の charset に utf-8

<head> の直後に <meta /> タグで charset="utf-8" 上記タグ以降に、日本語はきじゅつします。

head タグいぜんに、日本語を記述する場合、autodetect で判断されるので、
sjis のばあいは、

<!-- あ -->

というhtmlコメントを、html タグ直後に挿入、運がよければ、htmlコメント以降をsjisとして解釈してくれます。sjis で行くなら、javaファイル以外は、html、jsp、js、cssはsjisで保存してもokですが、2
バイト目が¥の文字が化けやすいのと、〜、が化けやすいのと、色々問題があるので、出た時修正すれば良いならそのままで、こんごのためにも、html,css,js,java,jsp,xmlなどのファイルはutf-8で記述するようにした方が無難です。

投稿2016/01/26 16:43

ipadcaron

総合スコア1693

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

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

退会済みユーザー

退会済みユーザー

2016/01/26 18:08

回答ありがとうございます。3時間ぐらい色々いじってどうやっても上手くいかなかったんですが、一旦tomcatを止めて再起動させたところ、あっさり上手くいきました。これはどういうことなのでしょうか。
ipadcaron

2016/01/27 01:48

java はBOM ありutf-8ファイルを認識できません。windows メモ帳で編集、保存した場合、ファイルの先頭に目に見えないコードが入ります。これがバイトオーダーマーク、BOMです。サクラエディタでは、utf-8 保存時にオプションで bom有り無し設定が出来ますが、そもそもbom対応できてる編集ツールは結構あっても、コンパイラなどは想定してない文字と判断され易いので基本、絶対にBOM付きで保存しない、ルールにしておけば問題ないです。メモ帳は余程の事情が無い限り開発用途には使わない方が悩みが少し減ります。 tomcat 再起動の件ですが、jboss じゃなくて、tomcat ですよね、起動して、2秒待てば使えませんか?tomcatでも、大抵のファイルは起動中のホットデプロイに対応していますが、幾つかの条件のとき、再起動しないとうまく修正結果が反映されないケースがありまづ。5分とか起動完了まで待つものではないので、横着せず、tomcat は基本的に「必ず再起動して使う」というスタンスで居てくれるといいですね。
guest

0

response.setContentType("text/html; charset=UTF-8");
にすればどうでしょうか。

あと、Sample2.javaファイルの文字コードはUTF-8でしょうか?

投稿2016/01/26 14:03

shanxia

総合スコア1038

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

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

退会済みユーザー

退会済みユーザー

2016/01/26 15:18

回答ありがとうございます。質問を編集したので見ていただけないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.45%

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

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

質問する

関連した質問