Ajax + Servletのリクエスト時の文字化けについて

このQ&Aのポイント
  • Ajax + Servletのリクエスト時に生じる日本語文字化けに関する問題について質問です。
  • 現在、prototype.jsを使用してAjaxでservletにリクエストしていますが、servlet側で受け取ったパラメータの日本語が文字化けしてしまっています。
  • jspファイルには適切な文字コードの設定が行われていると思いますが、文字コード変換がうまくいっていないようです。設定の変更が必要な箇所を教えていただけると助かります。
回答を見る
  • ベストアンサー

Ajax + Servlet のリクエスト時の文字化けについて

いつもお世話になっております。 prototype.jsを用い、ajaxでservletにリクエストしていますが、 servletのjavaがパラメータを受け取ると、日本語が文字化けしてしまいます。 new Ajax.Request('Test', { method: 'post', onSuccess: displayTest, parameters: "param1=" + "あいうえお" }); 上記param1をサーバー上で受け取ると以下のようになってしまいます。 縺ゅ>縺?∴縺? jspは <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"> 等の設定をしており、文字コードの変換が上手くいっていないと思うのですが、どこの設定を変更すればよいかアドバイスを頂ければと思います。 よろしくお願いします。

  • AJAX
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

prototype.jsの仕様とかはあまり詳しくないですが、 送信データはあらかじめURLエンコードが必要なんじゃないですか? new Ajax.Request('Test', { method: 'post', onSuccess: displayTest, parameters: "param1=" + encodeURIComponent("あいうえお") }); それから、JavaScriptは、通常はUTF-8を使用しますので、 HTMLの文字コードではなくUTF-8のままで送信すると思います。 Ajaxに限らずFormでも<a href="">でも、 ブラウザが送信する文字コードは送信元のHTMLの文字コードと一致するという保証はありませんので、 必ず確認、変換しないと行けないと思います。

take_july
質問者

お礼

encodeURIComponent を指定した所、上手く行くことが確認できました。 talooさん大変感謝です。 ありがとうございました。

関連するQ&A

  • Ajax+Servletで文字化け

    Ajax+Servletで"I"、"II"等が文字化けしてしまいます。 以下のようにajaxを使いserver側のservletへアクセスしています。 xmlhttp = this.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Msxml2.XMLHTTP"); //コールバック関数の登録 xmlhttp.onreadystatechange = display; xmlhttp.open('POST','Test',true); xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlhttp.send(null); フトントの画面はJSPで <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"> で定義しています。 サーブレットはpostgresのDBから項目を取得し、htmlを返却しています。 返却したhtmlをDOMのinnterHTMLを使い、画面を書き換えています。 response.setContentType("text/html; charset=Windows-31J"); servletからhtmlを返却する際、上記のようにWindows-31Jで返却すると、javascriptで"xmlhttp.responseText"の所で "ランタイムエラーが発生しました。デバックしますか 行107 c00ce56eの為、操作を完了できませんでした。" とエラーが出てしまいます。 response.setContentType("text/html; charset=shift-jis"); 出力する際、上記のようにShift-jisで返却すると、エラーは発生しないのですが、"I"、"II"等が文字化けしてしまいます。 何か解決策ありますでしょうか。 宜しくお願いします。

    • ベストアンサー
    • AJAX
  • サーブレットの文字化け

    こんにちは。 JAVAサーブレット時の文字化けで困っています。 環境 ≪サーバー≫ OS:Linux Tomcat4.1.31 JAVA1.4.2 ≪クライアント≫ OS:Windows2000 クライアントからhttp:192.168.X.X:8080/xxx.jspを呼び出して実行しています。 JSPファイル(Shift-JISで保存)からサーブレットを呼び出して サーブレットでrequest.getParameterをした時に、日本語が文字化けしてしまいます。 JSPファイルでは <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%> を指定しています。 なにかわかりましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Ajaxで文字化けしてしまいます

    IE6を使用しています。 UTF-8のBOMありで以下のコードを保存しています。 sample.txtに入っている「あああ」を出力すると 文字化けしてしまいます。 <script src="prototype.js" type="text/javascript"></script> を <script src="prototype.js" type="text/javascript" charset="utf-8"></script> で試しても同じ結果でした。 何が原因なのでしょうか? <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>prototype.jsサンプル</title> <script src="prototype.js" type="text/javascript"></script> <script type="text/javascript"><!-- function readText() { var sURL = "sample.txt?cache="+(new Date()).getTime(); new Ajax.Updater("result",sURL, { method: "get" }); } // --></script> </head> <body> <h1>prototype.jsサンプル</h1> <form method="get" name="ajaxForm" onsubmit="readText();return false;"> <input type="submit" value="sample.txtを読み込み"><br> </form> <div id="result"></div> </body> </html>

  • Ajax.Requestで?を含むパラメータがPOSTできなくて、困っています

    はじめまして、ajaxはほとんど初心者です。 早速質問させていただきます。 javascriptで var paramList = "link=aaa?bbb"; new Ajax.Request(url, { method: 'post', onSuccess: getData, onFailure: showErrMsg, parameters: paramList }); と入力して $_POST["link"]でパラメータを受け取ろうとしても、うまく受け取ることができません。 var paramList = "link=aaabbb"; として試してみたらうまく受け取れたので、 おそらく?に何かあると思い調べてみたのですがよくわかりませんでした。 "aaa?bbb"という文字列をそのままpostする方法はあるのでしょうか? わかる方がいらっしゃったら回答をよろしくお願いします。

  • JSPでの文字化け

    こんにちは。 今JAVAを勉強中でJSPファイルを作成しています。 test.jsp <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%> <HTML> <HEAD><TITLE>文字表示テスト</TITLE></HEAD> <BODY> <% String text = request.getParameter("text"); if (text != null) { if (!text.equals("")) { out.println("画面からの文字<BR>"); out.println(text); } } %> <FORM NAME="testForm" METHOD="post" ACTION="test.jsp"> <TEXTAREA NAME="text"></TEXTAREA> <INPUT TYPE="submit" VALUE="送信"> </FORM> </BODY> </HTML> Windowsで上のプログラムを実行すると問題なく表示されますが Linuxサーバで実行すると???となってしまいます。

    • ベストアンサー
    • Java
  • 【javascript文法】 prototype.js Ajax.Request onSuccess:に指定するfancitonの書き方

    以下HTMLは開いた時に'2'がアラート、続いて'hello world'がアラートされるものです。 動作的には期待どおりに動きますが、記述方法に難を感じています。 課題としては、Ajax.RequestのonSuccess:に指定するfancrionをprototypeを使って 宣言したfunctionで且つ、引数を与えたいです。 (Ajax.Requestが返してくる引数も使いたい。) 表現が下手ですみません。 ※行頭は全角スペースです。実際に機能させる為には  半角に修正もしくは行頭スペースは削除して下さい。 <html> <head> <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript"><!-- function http(){  this.val=1; }; http.prototype.request = function(){  var url="/ruby/hello.cgi"; //実際に検証する為にはwebサーバにこのcgiを置く必要あり  new Ajax.Request(url, {   method:"get",   onSuccess: function(h){r.processRequest(h,1);}   /* ↑http.prototype.requestの中なので、r.ではなくthis.processRequest(h,1)と記述したい*/  }); }; http.prototype.processRequest = function(h,arg){  alert(this.val+arg);  alert(h.responseText); }; var r = new http(); r.request(); //--></script> </head> <body></body> </html> 以下"/ruby/hello.cgi"の例 #!/usr/bin/ruby puts "Content-Type: text/html\n\n" puts "hello world" ※実際に実行する場合はprototype.jsが必要です。 これで、期待通りの結果が得られるのですが、コメントに記載したように、 http.prototype.request = function()の中でonSuccess:に指定する関数が、 this.と記述できず、r.と記述しないと動作しません。 http.prototype.request = function()の中で、 ~~~~~~~~~~~~~~ http.prototype.processRequest = function(h,arg) ~~~~~~~~~~~~~~ を使うのですから、 r.processRequest(h,1)ではなく、 ~ this.processRequest(h,1) ~~~~ と記述したいです。 因みに同じような質問を http://oshiete1.goo.ne.jp/qa4663141.html でしており、この『応用』だとも思うのですが、名案浮かばずです。 このような場合、どう記述するのがベターなのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • 【Ajax】SHIFT-JISの文字化け 

    AjaxのSHIFT-JIS文字化けで悩んでいます。 下記コードです。※prototype.js使用※ <html> <head> <meta http-equiv="content-type" content="text/html;charset=Shift_JIS"> <title>Sample</title> <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript"><!-- function loadHTMLFile(fName) { new Ajax.Request(fName, { method: "get", onComplete: displayData }); } function displayData(httpObj){ alert(httpObj); $("result").innerHTML =httpObj.responseText; } // --></script> </head> <body> <h1>サーバー上のHTMLファイルを読み込む</h1> <form> <input type="button" value="●●.htmlファイルを読み込み" onClick="loadHTMLFile('●●.html')"> </form> <div id="result"></div> </body> </html> ●●.htmlおよび、このコードを記述しているファイルのエンコードは "SHIFT-JIS"です。 ●●.htmlのエンコードを"UTF-8"にするとうまく表示できます。 "SHIFT-JIS"同士のやり取りの方法を教えて頂きたく思います。 宜しくお願い致します。 ※サーバはwindow用XAMPを自分のローカルに使用しています。  アパッチの設定はいじっていません。

  • servletからjspへの遷移時に文字化け

    質問します。 用件:servletからjspに遷移する際に文字化けが発生します。 環境: Eclipse3.7 java6 ApacheTomcat7.0 フレームワークはなし 内容: フォワードでTest.jspに遷移します。 RequestDispatcher requestdispatcher = request.getRequestDispatcher("/Test.jsp"); requestdispatcher.forward(request, response); Test.jspに遷移すると、Test.jspの「<body>テスト</body>」がブラウザ表示時に文字化けします。 (英数字は化けません。) servletを使用せず、Test.jspに直接アクセスすると文字化けが起きません。 servletで、Test.jspで適当なhiddenを作成し、servletでgetParameterをSystem.out.printしても 文字化けなどはおきません。 また、RequestDispatcherでは文字化けが起こりますが、 response.sendRedirect("/Test.jsp"); だと文字化けがおきません。 現状、sendRedirectとsessionを使用して値の受け渡しを行っておりますが、 RequestDispatcherを使用したいので困っております。 また文字コードは javaファイルそのものはSJIS jspは<%@ page language="java" contentType="text/html; charset=SJIS" %> となっております。 わかりにくい文章で申し訳ありませんが、ご回答の程よろしくお願いします。

    • ベストアンサー
    • Java
  • prototypeでajaxをする時に、onSuccessで指定した関数の戻値を取得する方法

    こんにちは、Ajax初心者です。 prototypeでAjaxをする時に、 new Ajax.Request(url, { method: 'get', onSuccess: getDat, onFailure: showErrMsg, parameters: paramList }); と言う風に書きますが、通信が成功した時に実行されるonSuccessのgetDataと言う関数の戻値を取得したいのですが、どうすればよいのでしょうか? 自分なりに調べてみると、prototypeのbindを使えばいけそうな感じなのですが、bindの使い方も良く分かりません(いろいろ調べてみたのですが、、、)。どうか詳しい方お願いします。

  • jspの文字化けの解消方法を教えてください

    input.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="result.jsp" method="post"> <input type="text" name="name"> <input type="submit" value="送信" name="submit"> </form> </body> </html> result.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> あなたの名前は<c:out value="${param.name}" />です。 </body> </html> 以上のJSPにおいてinput.jspを実行して表示されるフォームに 日本語を入力するとresult.jspにおいてその出力が文字化けします。 この問題の解消方法を教えてください。

    • ベストアンサー
    • Java

専門家に質問してみよう