• ベストアンサー

JSPでUTF-8の文字列表示

JSPでUTF-8の文字列を表示することができず困っています。 HTMLの<form>でPOSTした任意の文字列をjspでUTF-8の文字列に変えたいのですが、 いろいろ試したのですがどうもうまくできません。 jspは全然くわしくないので困ってます。 以下のようなHTMLで <body> <h1 style="background:#cccccc;width:60%">文字コード変換したい文字列を入力</h1> <br> *UTF-8に変換します。 <form method="POST" action="moji2.jsp"> <textarea name="enco" cols="60" rows="7"></textarea> <br /> <input type="submit" value="変換" /> </form> </body> 以下のようなJSPファイルで <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="java.net.*" %> <% request.setCharacterEncoding("Windows-31J"); %> <% String en = request.getParameter("enco"); String ren = URLEncoder.encode(en); %> <%=ren %> となまぁただUTF-8の文字列を表示をする勉強をしていたのですがいろいろかえてもShift_JISでエンコードされた文字列が表示されます。 例)あいうえお で入力すると %82%A0%82%A2%82%A4%82%A6%82%A8 やりたいことはこのサイトと同じことなんです http://www.tagindex.com/tool/url.html 例)あいうえお %e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a 最終目標は任意の文字列をUTF-8に変換して、ヤフーの形態素解析をすることです。初心者ですがよろしくお願いします。。

  • Java
  • 回答数2
  • ありがとう数0

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

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

テキストをUTFに変換するだけなら、getBytesでバイト配列を取得し、それを元にして新たにStringを作成すればいいでしょう。 String s0 = 元のテキスト String s1 = new String(s0.getBytes("UTF-8"), "UTF-8"); こんな感じですね。

BNR34FD3S
質問者

補足

ありがとうございます。 しかしうまくいかないのですが、何がいけないのでしょう? 教えていただいた String s0 = 元のテキスト String s1 = new String(s0.getBytes("UTF-8"), "UTF-8"); を String s0 = request.getParameter("enco"); HTMLで入力した任意文字列をPOSTしてSoにいれる String s1 = new String(s0.getBytes("UTF-8"), "UTF-8"); として、元の <% String en = request.getParameter("enco"); String ren = URLEncoder.encode(en); %> の部分に入れ替えたのですが・・・ あいうえお・・・と入力すると 普通に あいうえお  とそのまま表示されています。

その他の回答 (1)

noname#235174
noname#235174
回答No.2

こんにちは String ren = URLEncoder.encode(en); ではなくて String ren = URLEncoder.encode(en, "UTF-8"); でどうでしょう?

BNR34FD3S
質問者

補足

返事が大変おそくなってしまいました。 結果的にアドバイスいただいたもので行ってもダメでした。 表示させることに問題があるのかもしれません。 入力した文字列をそのまま形態素にリクエストさせてみようと思います。

関連するQ&A

  • 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
  • 文字化け対策について

     JSPに文字コードを指定しているにも関わらず、  「Java側でUTF-8の文字コードを指定してあげなければ、画面遷移した画面遷移先で文字化けが起こってしまう。」という状況なのですが、これの解決方法は無いものでしょうか? 【文字エンコード状況】 ●JSP  JSP側では、画面遷移元、画面遷移先の両方とも 文字コード「UTF-8で指定」しています。 <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> ●Java  Java側では、  response.setContentType("text/html; charset=UTF-8");//コンテンツタイプ  request.setCharacterEncoding("UTF-8"); //コード変換    という2点をコード変換として記述しています。 【値受け渡し状況(画面表示状況)】 ●1 画面遷移元 画面1(JSP)  <input type="text" value="あいうえお" name="name1"> ●2 java(servlet)  → 画面1のname1の“あいうえお”を受取る  String strName = new String(request.getParamete("name1")); request.setAttribute("name", strName);    ●3 画面遷移先 画面2(JSP) → “あいうえお”を表示  <%= (String)request.getAttribute("name1") %>            画面状況:文字化けしている。[ォ・・サウ」(といった感じです)   ●現状の解決方法  ここで、文字化けの解決方法として、  画面1のリクエストをゲットする際に、 java(servlet)での、文字の受け取り方の記述を変更しました。  String strName = new String(request.getParamete("name1"));    から    String struserName = new String(request.getParamete("name").getBytes("ISO-8859-1"),"UTF-8");    という風に「 .getBytes("ISO-8859-1"),"UTF-8") 」 を付与してやることで、回避でききました。が、これで解決策としては妥当でしょうか?(正しいでしょうか?)    気にかかっているところが、どうもこのやり方が強引に文字を変換しているようにしか思えませんでして(実際のところは正しいのかもしれませんが・・・)このまま値を渡してやっていいのか判別が付かずに困っています。    この方法でも大丈夫でしょうか?  特別、何か問題というのはありませんでしょうか?

    • ベストアンサー
    • Java
  • Javascriptで複数のテキストエリアの文字列を連結させたいです

    Javascriptで複数のテキストエリアの文字列を連結させたいです。 初めまして、 お世話になります。 ------------------------------------------------- <html> <head> <title>無題ドキュメント</title> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </head> <body bgcolor="#FFFFFF" text="#000000"> <form name="form1" method="post" action=""> いつ<br> <textarea name="when"></textarea> <br> <br> どこで<br> <textarea name="where"></textarea> <br> <br> だれが<br> <textarea name="who"></textarea> <br> <br> どうした<br> <textarea name="what"></textarea> <br> <input type="submit" name="submit" value="連結"> <input type="reset" name="submit" value="リセット"> <br> <br> いつどこでだれががどうした。<br> <textarea name="textfield"></textarea> </form> </body> </html> ------------------------------------------------- というHTMLがあったとして ボタンを押したら文字列を連結させたいのです。 その際、入力したテキストフィールドで文字列が改行をされてあった場合 それをそのまま反映して表示させたいのです。 ぜひよろしくお願いします。

  • 文字列データ量

    初歩的な質問で申し訳ありません。 HTMLのテキストエリアでPOSTした文字列が100Kバイト以下と以上とで処理を別けたいのですが、文字列のデータ量はどのようにしたらわかるのでしょうか? 単純に getBytesとかでしょうか? あまり詳しくはないのでやさしく教えてくださるとうれしいです。 やりたいこととしてはヤフーの形態素解析をかけたいのですが、 1リクエスト100Kバイト以内の制限になっています。 しかし、リクエストにはUTF-8の文字列を使うため、おそらく入力した文字列をUTF-8に変換して、その文字列が100K以内であるというのが条件だと思います。 現在UTF-8に変換してリクエストするまではできているのですが、100Kを超えてしまった場合にフリーズしてしまい困っています。 100K以内ならそのままリクエスト。 100K以上なら超えた分は別リクエストということをしたいと思っています。 よろしくお願いいたします。

  • jsp 改行コードで改行させて表示したい

    はじめまして。 PostgreSQLから読み込んだ文字列データを表示させるtomcat+struts+servlet/jspを作成中です。 データの文字列に含まれる改行が、クライアントに表示された際に反映されず困っています。 過去ログも調べ、近い質問はありましたが、僕とは内容が微妙に違うようで、改めて質問させていただきました。 例えば、あるテーブルのある項目に、 A B C というデータ(A,Bそれぞれの後に改行のある3行の文字列)があるとします。 これを読み込みaction form bean(と言うのですか?setter/getterを定義する関数です)を介してjspに埋め込むと、できあがるhtmlでは、 ABC と改行されずに表示されます。 htmlで改行させるには「<BR>」が必要なのかと、データ文字列に0x0dや0x0a、または0x0d+0x0aがあれば「<BR>」に置き換えてaction form bean(?)のsetterに渡してjspを作ると、今度は、 A<BR>B<BR>C と「<BR>」が文字列として表示されます。 htmlをソース表示すると、「A&lt;BR&gt;B&lt;BR&gt;C」で、親切にも「<」「>」をそれぞれ「&lt;」「&gt;」に勝手に置き換えあくまで文字列として表示してくれるようです。 試しに改行コードを「&lt;BR&gt;」に置き換えても予想通りその部分は &lt;BR&gt; とそのまま表示され、そのソースは「&amp;lt;BR&amp;gt;」でした。 「<」や「&lt;」等をそれぞれ「&lt;」「&amp;lt;」のように置き換える作業は、どこが行っているのでしょうか。 また、改行位置で改行させるにはどうすればよろしいでしょう。 OSはwindowsXPです。 無知ゆえに、つまらないことで悪戦苦闘しているのかも知れませんが、経験も浅くてよく解りません。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 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
  • Jspで文字化けするのです

    がどうしたらいいでしょうか? Java1.6.0_13&Tomcat6.0.18をEclipse3.42で動かしています。 以下のJSPを実行してみると文字化けします。 よろしくお願いします。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/WEB-INF/tld/struts-bean.tld" prefix="bean"%> <!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>Java JakartaStruts</title> </head> <body> <bean:include id="page2" href="http://www.google.co.jp/" /> <%=page2%> </body> </html>

    • ベストアンサー
    • Java
  • JSPのエラー画面(error.jsp)に遷移(移動)しない

    フォームを設定したlogin.htmlから情報を受け取るlogin.jspで検証をして、間違ったid番号を入力した場合はerror.jspに移動させたいのですが、遷移せず、「HTTP 500 - 内部サーバー エラー」となります。 改善のご教示お願い致します。 [login.html] <html><head><title>login.html</title></head> <body><h1>ログイン</h1><hr><br> <form method="post" action="/webapp/JSPtest/login.jsp"> <table> <tr> <td>ID:</td> <td><input type="text" name="id"></td> </tr> </table> <br><br> <input type="submit" value="送信"> <input type="reset" value="キャンセル"> </form> </body> </html> [login.jsp] <%@ page contentType="text/html;charset=Shift_JIS" pageEncoding="Shift_JIS" %> <%@ page errorPage="error.jsp" %> <html><head><title>login.jsp</title></head> <body> <% String id = "2007"; String data = request.getParameter("id"); StringBuffer temp = new StringBuffer(); if(!id.equals(data)) temp.append("数値間違い<BR>"); if(temp.length() != 0){ throw new Exception(temp.toString()); } %> <h1>こんにちは<%= data %>様</h1> <h1><%= temp.length() %> </h1> </body></html> [error.jsp] <%@page contentType="text/html;charset=Shift_JIS" pageEncoding="Shift_JIS" %> <%@ page isErrorPage="true" %> <html><head><title>error.jsp</title></head> <body> エラーメッセージ<br> <%= exception.getMessage() %> </body></html>

  • JSPプログラミング 携帯電話用のJSPページを表示

    PCのブラウザでアクセスしてきたクライアントに対してはPC用のJSPページへ転送し、携帯電話でアクセスしてきたクライアントに対しては携帯電話用のJSPページへ転送する処理を行うプログラムで、PCからのアクセスはできるのですが、携帯電話からアクセスすると「サーバメンテナンス中です。しばらくしてからご利用ください。」と携帯電話の画面には表示されます。メンテナンス中でもないのに何が原因なのですか? 転送元のsmp.jsp <%@ page contentType="text/html; charset=Windows-31J" %> <% // 内容: forward アクションを使用する // User Agent を取得 String user_agent = request.getHeader("user-agent"); // User Agent が "DoCoMo****" のタイプだったら携帯電話用の // ページへ転送 if(user_agent.startsWith("DoCoMo")) { %><jsp:forward page="smpMobile.jsp" /><% } // PC用のページの内容を出力 %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>forward アクションを使用</title></head> <body> <p>PC 用のページ</p> </body> </html> 転送先のsmpMobile.jsp <%@ page contentType="text/html; charset=Shift_JIS" %> <% // 内容: forward アクションを使用(携帯電話用のページ) String user_agent = request.getHeader("user-agent"); %> <html><body> 携帯用のページです<br> <%= user_agent %> </body> </html>

    • ベストアンサー
    • Java
  • jspでのremoveによる削除方法

    通販サイトのカートの画面で購入した商品一覧が表示される画面です 削除ボタンで商品を削除したいのですが上手くいきません for(int i=0; i<item.size(); i++){ String[] b=(String[])item.get(i); tableData +="<form action=\"cart.jsp\"><tr><td>"+b[0]+"</td><td>"+b[1]+"</td><td><img src=\""+"img/"+b[2]+"\"</td><td> <input type =\"hidden\" name=\"remove\" value=\""+i+ "\"> <input type=\"submit\" name=\"d\" value=\"カートから削除する\"></form></td></tr>"; } String removeValues=request.getParameter("remove"); session.removeAttribute(""); 全文です <%@ page contentType="text/html;charset=Shift_JIS"%> <%@ page import= "java.util.ArrayList" %> <%@ page import= "java.util.List" %> <%@ page session="true" %> <% request.setCharacterEncoding("Shift_JIS"); String[] Name ={"たらばがに","毛ガニ","いか","うに","あわび"}; String[] Price = {"4000","2500","500","3000","1500"}; String[] Img ={"taraba.gif","ke.gif","ika.gif","uni.gif","awabi.gif"}; String tableData =""; ArrayList item=(ArrayList)session.getAttribute("itemlist"); try { for(int i=0; i<item.size(); i++){ String[] b=(String[])item.get(i); tableData +="<form action=\"cart.jsp\"><tr><td>"+b[0]+"</td><td>"+b[1]+//商品一覧を出す "</td><td><img src=\""+"img/"+b[2]+"\"</td><td><input type =\"hidden\" name=\"remove\" value=\""+i+ "\"><input type=\"submit\" name=\"d\" value=\"カートから削除する\"></form></td></tr>"; } String removeValues=request.getParameter("remove"); session.removeAttribute(""); int cost =0;//合計金額 for(int j=0; j<item.size(); j++){ String[] a=(String[])item.get(j); Integer value=Integer.parseInt(a[1]); cost +=value; session.setAttribute("costs",cost); } }catch(Exception e){ //tableData+=("<tr><td>"+"戻って入力してください"+"</td></tr>"); } %> <!doctype html> <html> <head> </head> <h2>カートの詳細</h2> 合計金額は<%=session.getAttribute("costs")%>円になります<br><!--合計金額の表示 --> <br> <table border ="1"> <%=tableData %> </table> <br> <a href="session.jsp">商品一覧に戻る</a> <br> </html>

    • ベストアンサー
    • Java