• ベストアンサー
  • 困ってます

URLConnectionで日本語を送りたいのですが。。

HTMLのフォームからPOSTされた内容をHTMLにして表示する掲示板Servletがあります。 このServletに、Javaアプリケーションから接続、POSTをかけて、HTMLのフォームからPOSTした場合と同じ動作をさせようと考えています。 半角英数字はServletに渡せるのですが、日本語が化けてしまいます。 エンコード等しなくてはならないものと考えますが、どのようにしたらよいのでしょうか。 ご教授、よろしくお願い致します。 該当個所のソースが以下です。 考え方等、間違っているようでしたら、合せてご指摘いただければ幸いです。 URL u = new URL("http://URL");  uc = u.openConnection();  uc.setDoOutput(true);  uc.setUseCaches(false); String str_stream ="name=Qookies&subject=Question&value=日本語を送りたいです。。"; ObjectOutputStream outstr = new ObjectOutputStream(uc.getOutputStream()); outstr.writeObject(str_stream);

noname#744
noname#744

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数625
  • ありがとう数188

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

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

送る際にはあまり気にしないでいいのではない でしょうか。CGIにしても、Servletにしても 最終的に受け取る側が、日本語だと判断できれば いいはずなので、Servlet側で、デコードして あげればどうでしょうか。 #Servletは使ったことがないので、デコードの #仕方はわかりません。たぶん、Perlのjcode.plの #ようなものがあるのでは・・・ 出来ないときは補足してください。 ではでは☆

共感・感謝の気持ちを伝えよう!

質問者からのお礼

遅くなりましたが、おっしゃるとおり、Servlet側のデコード処理に問題がありました。 ありがとうございました。

関連するQ&A

  • HttpURLConnectionを使ったHTTP

    HttpURLConnectionを使ったHTTP通信について質問です。 POSTメソッドで、JSON形式のデータを送信しています。 送信先URLは自作のサーブレットです。 HTTP接続はできましたが、サーブレット側でJSON形式のデータをどのように取得すればよいかが分かりません。 JSON形式ではなく「p1=aaa&p2=bbb」のようなパラメータであれば、getParameter("p1")で取得できるのですが・・・ ソースの抜粋は以下の通りです。 <クライアント側>--------------------------------------------------- URL url = new URL("サーブレットのURL"); HttpURLConnection uc = (HttpURLConnection) url.openConnection(); uc.setDoOutput(true); uc.setRequestMethod("POST"); String postStr = "{\"id\": \"blog\"}"; OutputStream os = uc.getOutputStream(); PrintStream ps = new PrintStream(os); ps.print(postStr); ps.close(); InputStream is = uc.getInputStream(); ------------------------------------------------------------------- <サーブレット側>--------------------------------------------------- public void doPost(HttpServletRequest request, HttpServletResponse response)     throws IOException, ServletException {     // ここでpostStr の内容を取得したい! } ------------------------------------------------------------------- JAVAの知識が浅いため、分かりにくい質問になっていたらすいません。 ご存知の方、よろしくお願いします。

  • JavaでSSL通信について(JDK131)

    Javaを用いてSSL通信を行いたいと思っています。 しかし、SSL通信を行うには「HTTPSURLConnection」が 必要で、JDK14以上となっています。 JDK131で利用するにはどうすれば可能でしょうか?? よろしくお願いします。 ちなみに、HTTPはこんな感じですよね?? ======================== import java.io.BufferedReader; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.security.*; public class test { public static void main(String[] args) { String urlString = "https://XXX.cgi"; try { URL url = new URL(urlString); URLConnection uc = url.openConnection(); // POST可能にする uc.setDoOutput(true); // POST用のOutputStreamを取得 OutputStream os = uc.getOutputStream(); // POSTするデータ String postStr = "foo1=bar1&foo2=bar2"; // データをPOSTする PrintStream ps = new PrintStream(os); ps.print(postStr); ps.close(); } catch (MalformedURLException e) { System.err.println("Invalid URL format: "                    + urlString); System.exit(-1); } catch (IOException e) { System.err.println("Can't connect to "                    + urlString); System.exit(-1); } } }

  • Javaを使ったチャットシステムについて

    はじめまして。 チャットシステムを作ろうと思い他の方が制作されたソースコードを拝見させて頂いたのですがよくわかりませんでした。 よろしければ教えて頂けないでしょうか? よくわからなかったのは読込・書込処理の部分です。 どういう流れで会話のやり取りが行われているのかよくわかりません。 例えば、Aさんが書き込んでBさんがその書き込みを見るまで、のような一連の流れです。 ・読込処理 URL wi_url = new URL(p_url+"chat1.cgi"); URLConnection wi_connect = wi_url.openConnection(); wi_connect.setDoInput(true); wi_connect.setDoOutput(true); wi_connect.setUseCaches(false); OutputStream wo_stream = wi_connect.getOutputStream(); BufferedWriter wo_buffer = new BufferedWriter(new OutputStreamWriter(wo_stream)); wo_buffer.write("read", 0, 4); wo_buffer.flush(); wo_buffer.close(); InputStream wi_stream = wi_connect.getInputStream(); BufferedReader wi_buffer= new BufferedReader(new InputStreamReader(wi_stream)); ・書込処理 URL wo_url = new URL(p_url+"chat2.cgi"); URLConnection wo_connect = wo_url.openConnection(); wo_connect.setDoOutput(true); wo_connect.setDoInput(true); wo_connect.setUseCaches(false); OutputStream wo_stream = wo_connect.getOutputStream(); BufferedWriter wo_buffer = new BufferedWriter(new OutputStreamWriter(wo_stream)); wo_buffer.write(w_data, 0, w_data.length()); wo_buffer.flush(); wo_buffer.close(); InputStream wi_stream = wo_connect.getInputStream(); BufferedReader wi_buffer = new BufferedReader(new InputStreamReader(wi_stream));

  • javaのObjectOutputStreamのエラーが消えません

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test.txt")); oos.writeObject(text); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("text.txt")); text = (LinkedList<String>)ois.readObject(); 最後の分のois.readObject()のなぜかClassNotFoundExceptionになってしまって先に進めないです。 これではあまり意味がないんですが、わかる方がいらっしゃいましたら教えてください

  • JavaでPOSTでデータ送信時のボディについて

    javaでHTTP通信をする際にメソッドをPOSTにしてボディにパラメータを設定する仕方がいまいちわかりません。 調べてみても、POSTはGETのようにURLに付加するのではなくボディ部に設定すればよいというのはわかったのですが。実際どういうソースで設定できるのか例が見つからなく困っています。 なんとなくの判断ですが、 message = "httpテスト"; URL url = new URL("http://~~~/xxx.html"); HttpURLConnection http = (HttpURLConnection)url.openConnection(); http.setRequestMethod("POST"); http.setDoOutput(true); http.setRequestProperty("Content-Type", "~~~"); http.setRequestProperty("Content-Length", Integer.toString(message.length())); ↓↓↓(1) BufferedWriter outer = new BufferedWriter(new OutputStreamWriter(http.getOutputStream())); outer.write(message); outer.flush(); outer.close(); ↑↑↑(1) http.connect(); 上記(1)の箇所でボディへの設定ができているのかなという判断をしているのですが、あっていますでしょうか?? よろしくお願いします。

    • ベストアンサー
    • Java
  • なぜか + が半角スペースに変換されてしまう

    以下を実行すると、javaから送信される文字列"a+a"が"a a"に変換されてPHPから出力されます。 どうして + が半角スペースに変換されてしまうのでしょう? ・送り手側(クライアント、java) URL url = new URL(サーバーのPHP); URLConnection con = url.getOpenConnnection(); con.setDoOutput(); BufferedWriter bw = new BufferedWriter(new OutputStream(con.getOutputStream()), "UTF-8"); bw.write("text=a+a"); bw.flush(); cw.close(); ~略~ ・受け手側(サーバ、php) echo $_POST["text"]; お詳しいかたみえましたら、+ がスペースに変わってしまう原因をお教えいただけないでしょうか。 何か思い当たることがあれば何でも構いません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • HttpURLConnection転送で漢字表示

    お世話になっております。 掲題の質問について、ご教示いただけないでしょうか。 【質問】 サーバーAのサーブレットA1より、 サーバーBのサーブレットB2へ漢字をPOSTしようとしています。 エンコードはサーブレットA1,B2ともにShift_JISを使用しています。 しかし、A1より送信した漢字のデータをB2で表示させると"?"になってしまいます。 どなたかサーブレットB2でもShift_JISとして、漢字表示させる方法をご教示ください。 【サーブレットA1の該当箇所】 URL url = new URL("サーブレットB2のURL"); HttpURLConnection conn = (HttpRLConnection) url.openConnection() ; conn.setRequestMethod("POST"); conn.setRequestProperty("Accept-Language","ja"); conn.setDoOutput(true); PrintWriter writer = new PrintWriter(new OutputStreamWriter(conn.getOutputStream() , "Shift_JIST") ; writer.print("data=漢字"); 【サーブレットB2の該当箇所】 public void doPost(HttpServletRequest req, HttpServletResponce resp){ try{ req.setCharacterEncoding("Shift_JIS"); resp.setContentType("text/html;charset=Shift_JIS"); System.out.println( req.geParameter("data") ); }catch(Exception e){ System.out.println(e); } } 以上、宜しくお願いいたします。

    • ベストアンサー
    • Java
  • getOutputStream()の取得が遅い

    とあるサーバーBに存在するPHPのAPIにアクセスする下記プログラムを書いたのですが ある条件下でレスポンスが遅く原因がわからないので質問させてください。 下記プログラムを職場のパソコンから実行したところうまくいき結果も得ることができました。 ところがこれをサーバーAにアップロードし、サーバーA上で実行したところ 結果は返ってきたのですがレスポンスがものすごく遅く使い物になりませんでした。 どこがボトルネックになっているのかデバッグしてみたところ OutputStream out = con.getOutputStream(); の部分の実行にすごく時間がかかっていることがわかりました。 職場では「名前の解決に時間がかかっているのでは・・・」という意見もありましたが getOutputStream()の実行前に URLConnection con = url.openConnection(); でコネクションを張っているのでこの時点でサーバーAからサーバーBには接続されていて 名前の解決はできているのではと思ったのですがこの認識はあってますでしょうか。 getOutputStream()はサーバーAからサーバーBにデータを送信するための データの通り道を作成しているという認識です。 そうならばこのデータの通り道を作成するの時間がかかる原因は何が考えられますでしょうか。 ちなみに職場のPCからサーバーBへはインターネットを介して接続しています。 サーバーAとサーバーBは同じLAN内にあるサーバーです。 public void sendTest(String apiUrl, String apiParam) { try {    apiUrl="http://test.sample.jp"; ← 職場PCで当プログラムを実行するときはこちらを使用                 apiUrl="http://192.168.1.15"; ← サーバーA上で当プログラムを実行するときはこちらを使用 URL url = new URL(apiUrl); URLConnection con = url.openConnection(); con.setDoOutput(true); //-------------------- //送信する //-------------------- OutputStream out = con.getOutputStream(); OutputStreamWriter ow1 = new OutputStreamWriter(out); BufferedWriter bw1 = new BufferedWriter(ow1); //POSTの内容を書き出す bw1.write(apiParam); bw1.close(); ow1.close(); } catch(Exception e) { e.printStackTrace(); } }

    • ベストアンサー
    • Java
  • Java サーブレット 画像

    サーブレットからgoogleへ接続し、googleのページをブラウザへ返す際、画像のパスが、サーブレットのURLに置き換わってしまいます。 (現象↓) http://localhost:8080/intl/ja_jp/images/logo.gif (やりたいこと↓) http://img0.gmodules.com/ig/f/vcbK_2Vv3S8/intl/ALL_jp/logo.png 上記の(やりたいこと)ようにするには、どうしたら良いでしょうか。 URL url = new URL("http://www.google.co.jp/"); HttpURLConnection urlconn = (HttpURLConnection) url.openConnection(); BufferedInputStream in = new BufferedInputStream(urlconn.getInputStream()); ServletOutputStream sout = response.getOutputStream(); int data; while ((data = in.read()) != -1) { sout.write(data); } sout.close(); urlconn.disconnect();

    • ベストアンサー
    • Java
  • Java(Servlet,JSP)を使用してあるURLにHTTPリクエスト(POST)を送信する方法

    あるWeb APIを使用したWEBアプリケーションを作成しています. JavaのServletやJSPで実装していますが,サンプルではGETでリクエストを送る方法だけが紹介されていました. APIがPOSTに対応しているので,POSTでリクエストを送信しようと思います. サンプルは以下のようになっていましたが,POSTでリクエストを送信する場合,どう変更すれば良いでしょうか? URL url = new URL("http://xxxxxx.xx/xx/?q=" + URLEncoder.encode(request.getParameter("data"), "UTF-8")); URLConnection con = url.openConnection(); InputStream stream = con.getInputStream(); リクエストは日本語を含むデータをパラメータに含める予定です.

    • ベストアンサー
    • Java