• 締切済み

JBuilderの文字化け

JBuilderでサーブレットでパラメータを渡す際に日本語が文字化けしてしまいます。 Enumeration enum=request.getParameterNames(); while(enum.hasMoreElements()){ String key=(String)enum.nextElement(); String value=new String(request.getParameter(key).getBytes("8859_1"),"JISAutoDetect"); out.println(value); } ソースは上記のようになっていますが日本語を表示できません。直す方法がわかる方どうかよろしくお願いします。

  • arusu
  • お礼率8% (27/308)
  • Java
  • 回答数1
  • ありがとう数2

みんなの回答

  • m_hagizo
  • ベストアンサー率65% (31/47)
回答No.1

環境が良く分からないので何ともいえませんが、 String value=new String(request.getParameter(key).getBytes("8859_1"),"JISAutoDetect"); のところを、エンコーディングの指定を取り払って、 String value=request.getParameter(key); とすると、どうなりますか? あと、サーブレットを動かしている環境(OSの文字コード等)によると思いますので、 ・サーブレットが動作しているOS ・どのように文字化けするのか(???となってしまうのか、わけわからん文字が出るのか) といったことが分かれば、もう少しアドバイスできるかもしれません。

arusu
質問者

お礼

ご回答ありがとうございます。 どのような文字化けかといいますと、???といったおかしな文字が表示されます。また、 String value=request.getParameter(key); とすると同じように文字化けします。 あと、使用しているOSはWindows98です。

関連するQ&A

  • 文字化け

    JSPで取ったデータをServletがGetParameterしています。 文字化け防止のコーディングは以下のようにしています。 String adr = request.getParameter("adr"); //住所 if(adr !=null && adr.equals("")==false){ //文字化け防止(日本語変換) adr = new String(adr.getBytes("8859_1"), "JISAutoDetect"); }else{ adr = ""; } が、全角のハイフン(-)だけが 文字化けしてしまいます。 ?になってしまいます。 なにかいいページかヒントがありましたら 教えてください。

  • 困ってます。

    文字化けについて分からない事があります。 環境は RedHatLinux7.2, Postgresql7.1, Tomcat3.2.4, JDK1.4.0 です。 HTMLフォームで入力されたパラメータをサーブレットで受け取り、そのパラメータをDBのテーブルにSQLのINSERT文でデータを追加する際に日本語の部分(例:氏名)が文字化けしてしまいます。 文字化けの防止策として、 (1)String KANJINAME = new String(request.getParameter("KANJINAME").getBytes("8859_1"), "JISAutoDetect"); (2)String KANJINAME = new String(request.getParameter("KANJINAME").getBytes("8859_1"), "EUC-JP"); としても、文字化けしてしまいました。 今までサーブレット、JSP等で上記の(1)、(2)のような方法で文字化けを防いできたのですが、今回のようにDBのテーブルにInsert文で日本語を含んだデータを追加しようとすると文字化けしてしまいました。 これはコーディングの問題なのでしょうか?それともTomcat,Linux,Postgresqlに何らかの設定等が必要なのでしょうか? もし何か分かることがありましたら、ご教授お願い致します。

  • String <=> byte配列 の際のエンコード(続)

    前回の質問(4つほど前の)の続きですが、 8859-1が日本語を扱うことができるという勘違いは、 サーブレットで日本語のリクエストパラメータを使用する際の、 次のようなコードに起因してます。 String param = new String(request.getParameter("test")).getBytes("8859_1"), "JISAutoDetect"); ここで、request.getParameter("test") から返ってくる String は 8859-1エンコーディングされたものだと単純に考えていたのですが、 今回、あらためてこれについて考えてみました。 request.getParameter("test").getBytes("8859_1") で、 ブラウザのエンコーディングを用いた、パラメータを表現するバイト列が ちゃんと取得できています。 では、request.getParameter("test") の結果返ってくる String は ブラウザのエンコードでパラメータを表現するバイト列を用い、 値はそのままで、エンコード名だけを8859-1として構築されたもの、 になると思うのですが、 そういう認識で正しいのでしょうか。 また、それで正しいのなら、それと同じことを自分で行うには どうすればよいのでしょうか。 とても気になります。 もしわかる方がいらっしゃったら、是非回答お願いします。

    • ベストアンサー
    • Java
  • parameterのunicode変換

    unicode変換について聞かせてください。 servletでparameterを受け取って、unicode変換させて、自分の 必要なparameterだけを使うということです。 いろいろHPなどを参考に調べた結果、 Hashtable data = new Hashtable(); Enumeration e = request.getParameterNames(); while (e.hasMoreElements()) { String key = (String)e.nextElement(); String[] values = request.getParameterValues(key); try { data.put(key,new String(values[0].getBytes("8859_1"),"JISAutoDetect")); } catch(java.io.UnsupportedEncodingException ex) { } } との内容の変換を元に考えたのですが、自分では改造できずにいます。 上記の例では、Hashtableに収められた、変換内容の取得が、 String hinmei = (String)data.get(kye); などとすると、hinmeiのunicode変換された値がすべて取得される と思います。 しかし、自分の欲しいunicode変換された値だけを取得するには どのようにしたらよいでしょうか? 例えば、 String hinmei = (String)data.get(hinmei); String hinban = (String)data.get(hinban); というように、個別で取得したいのです。 もちろん、この他にも、parameterで送られてきている値は、あるかも 知れませんが、この場合は使わず・・・。 また、使うときには、 String hinmoku = (String)data.get(hinmoku); と追加するだけでいいようにしたいのです。 ご教授できらた幸いです。

    • ベストアンサー
    • Java
  • DBへ入出力する文字が文字化けしてしまいます。

    Urizakaと申します。 さて、現在Win2000+JBuilder4.0を使い、WinNTにあるDB(SQL-Server)へ とデータを出入力するというJSPの開発をしているのですが、この時になぜか DBへ入出力する日本語のデータが文字化けしてしまいます。 doGet、doPost部分で、入出力したデータに対して  (new String(request.getParameter("×××").getBytes("8859_1")); という雑誌に載っていた処理を加えてみたのですが駄目でした。 すみませんが、どなたか文字化けを防止する方法をご存知でしたら教えて ください。宜しくお願いします。

    • ベストアンサー
    • Java
  • 文字コード

    少し、聞かせてください。 今、WEBアプリケーションを作っています。 HTMLからのリクエスト文字を受け取りServletで処理を考えています。 そこで、 String para = request.getParameter(para); String param = new String(para.getBytes("8859_1","JISAutoDetect"); で、8859_1,Shift_JIS,EUC-JP,ISO-2022-JP の Unicode 変換することが できるのは、分かりました。 では、この HTML からのリクエスト文字が、どのタイプの文字コード でかかれているかを検出できるのでしょうか? 自分では、バイト列をつかさどる方法が浮かぶのですが・・・。 HPでもかまいませんので、教えてください。

    • ベストアンサー
    • Java
  • サーブレットでデータベース操作。

    サーブレットを使ってMySQL内のテーブルにレコードを追加、変更、削除できるようなプログラムを作っています。流れとしましては『HTML画面→サーブレット起動→レコード追加、変更、削除』といった具合です。追加、変更ができてなぜか削除だけできません。SQL文を書き換えるだけのはずなのですが・・。どなたか教えて下さい。windows2000Professional, j2sdk1.4.0_01, Tomcat3.3.1,MySQL3.23.47 略 . . Connection con = null; Statement stmt = null; try { con = DriverManager.getConnection( "jdbc:mysql://localhost/db_ichat", "root", "pen3"); stmt = con.createStatement(); String seqno = request.getParameter("seqno"); String name = request.getParameter("name"); String namejp = new String(name.getBytes("8859_1"), "JISAutoDetect"); String psw = request.getParameter("psw"); String pswjp = new String(psw.getBytes("8859_1"), "JISAutoDetect"); String email = request.getParameter("email"); StringBuffer buf = new StringBuffer(); buf.append("delete from t_id "); buf.append("where seqno = "); buf.append(seqno); stmt.executeUpdate(buf.toString()); try { stmt.close(); } catch (Exception e) {} try { con.close(); } catch (Exception e) {} . . 略。

    • ベストアンサー
    • Java
  • テキストBOXから取得した文字コードの扱いについて

    JSPで記述したページのテキストBOXに入力されたSJIS形式の日本語文字データをサーブレットに送信してそれを取得して、文字のエンコードを行う際に気がついたのですが String text = request.getParameter("text"); byte[] bytes =text.getBytes("ISO8859_1"); text=new String(bytes, "SJIS"); のようにすればサーブレットで扱う時に正しく日本語表示できるのですが String text = request.getParameter("text"); byte[] bytes =text.getBytes("SJIS"); text=new String(bytes, "SJIS"); とすると正しく表示されません。 text.getBytes("SJIS");で取得格納されるbyteのデータに違いがあるようです。この場合取得されるbyteの配列は3つになっています。 ISO8859_1で取得するとbyte配列は2つになっています。このISO8859_1のbyte配列のデータと同じ中身のものを単にString(byteデータ,文字コード)のコンストラクタに入れるとSJISの文字コードで正しく変換出来ています。 要するにもともとSJISの文字データをgetByte("SJIS")で変換したものがなんで、もとに戻せないのかということです。また、違う文字コードのISO8859_1ではSJISに対応したbyteの配列になるのかということです。 ひどい乱文ですみませんが、よろしくお願いします。

  • 困ってます

    HTMLファイルのフォームのパラメータをサーブレットに引渡し、サーブレット内で、ファイルに出力(CSV形式)したいのですが、日本語が含まれていると文字化けしてしまいます。 文字化け防止の為に下記のようなコードを書いているのですが、うまくいきませんでした。(フォームの"name"というパラメータをサーブレットに渡します。) ----------------------------------------------------- (サーブレットのファイルより一部抜粋) //変数&定数の宣言 private static final String csvFile = "/home/csvFile.csv"; String name; FileWriter fw = new FileWriter(csvFile); PrintWriter pw = new PrintWriter(fw); //☆文字化け防止コード name = request.getParameter("name"); name = new String(name.getBytes("8859_1"),"SJIS"); //ファイルに出力 pw.print(name + ","); pw.close(); ----------------------------------------------------- 上記のようなコードの書き方だと駄目でしょうか? ちなみに"SJIS"を"euc-jp"、"JisAutoDetect"に変えてもうまくいきませんでした。 実行方法は (1).windowsでサーブレットをコンパイルし、 (2).(1)で出来たクラスファイルをLinuxに転送し、 (3).Linux上でTomcatの再起動をして実行しています。 もし何か分かることがありましたらご教授お願い致します。

  • requestの値が削除されません…

    requestの値を削除したいのですが、全く削除出来ません。 ソースは Enumeration parameterNames = request.getParameterNames(); while( parameterNames.hasMoreElements() ) { // パラメータ名取得 String name = (String)(parameterNames.nextElement()); /* 値列挙 */ String[] valueList = request.getParameterValues(name); /* パラメータ値列挙 */ for ( int i = 0 ; i < valueList.length ; i++ ) { // 値を削除 request.removeAttribute(name); } } です。 試しに request.setAttribute(name,"***"); で値をセットし、 request.removeAttribute(name); (または、request.setAttribute(name,null);) でnameを特定のパラメータで、やってみて、 request.getAttribute(name); で確認したところ、値は削除されました。 値のセットの仕方が問題なのでしょうか?? 環境は、 JDK1.3.1 oc4j1.0.2.2.1 です。 どうすれば、requestの値を削除出来るのか、ご教授お願いしますm(_ _)m

    • ベストアンサー
    • Java

専門家に質問してみよう