QA@IT
«質問へ戻る

質問を投稿

HTTPリクエストの文字コード

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()を呼び出さなくてはならないからです。
どのように書けばうまく行くのか? ご存知の方がいらっしゃいましたら教えてください。

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()を呼び出さなくてはならないからです。** 
どのように書けばうまく行くのか? ご存知の方がいらっしゃいましたら教えてください。