- - PR -
HTTPのリクエストで文字コードを認識する方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-07-06 15:57
HTTPのリクエストで文字コードを認識する方法を教えてください。
JavaのクライアントアプリケーションでHTTPのリクエストを行なう場合、 大体以下のようなコードを書くと思います。 ------------------------------------------------------------ URL url=new URL("http://**********"); HttpURLConnection con=(HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); con.connect(); BufferedReader br=new BufferedReader(new InputStreamReader(con.getInputStream())); String field; while((field=br.readLine())!=null) System.out.println(field); con.disconnect(); ------------------------------------------------------------ しかしこのやり方では、InputStreamReader()で文字エンコーディングを指定していないために、サイトによっては文字化けを起してしまいます。 getContentType()メソッドを使って charsetを取得する方法を加えてみたのですが、Content-Typeヘッダにcharsetが指定されていないもの多くて改善にはなりませんでした。 次に、HTML文書内のMETA宣言のhttp-equiv属性で設定された Content-Typeヘッダのcharsetパラメータを参照する方法を取ろうと思ったのですが、ここで矛盾にぶつかりました。 取得したcharsetは、InputStreamReader()を呼び出す際のパラメータとして使用したいのに、charsetを取得する為に そのInputStreamReader()を呼び出さなくてはならないからです。 どのように書けばうまく行くのか? ご存知の方がいらっしゃいましたら教えてください。 |
|
投稿日時: 2005-07-06 18:43
リクエストじゃなくてレスポンスの文字コードですよね。
現状は混沌としているので、けっこう面倒な処理が必要になります。
|
|
投稿日時: 2005-07-08 08:19
やはりHTML本文(HTTPレスポンスという言い方で合ってましたでしょうか?)を一度は読むしかないのですね。
試してみて結果が出たらUPします。 スフレ様へ ご回答 ありがとうございました。 とても勉強になります。 バイナリでのデータ取得についても色々試そうと思っています。 |
|
投稿日時: 2005-07-15 19:04
あるサイトに
「InputStreamReader() のエンコード文字に、 "JISAutoDetect" を指定すると、なぜか自動識別/変換してくれます。」 と書いてありましたので、それに従って BufferedReader br=new BufferedReader(new InputStreamReader(con.getInputStream(),"JISAutoDetect")); としたところ、殆どの文字化けが解消されました。 それでも完全ではなく、きちんとcharsetを調べて それを指定しないと正しく表示されないものもありました。 でも逆にcharsetをきちんと指定することでかえって文字化けしてしまうサイトもありました。 例えば、"Shift_JIS"のサイトで '−'や'〜'が、なぜか' ?'に化ける現象がありました。 それもごく僅かでしたけど・・・ しかしブラウザで見ると正しく表示されているのでちょっと腑に落ちない部分ではあります。 ただ私の用途としては、最初に書いた方法でほぼ満足する結果がでました。 |
1