3

ページのエンコーディングでHTMLページを含むHTTPストリームを読み取るにはどうすればよいですか?

これは、HTTPストリームを取得するために使用するコードフラグメントです。InputStreamReaderにはencodingオプションの引数がありますが、それを取得する方法についてはわかりません。

URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader d = new BufferedReader(new InputStreamReader(is));
4

4 に答える 4

4

Webページの取得は、かなり複雑なプロセスです。そのため、 HttpClientなどのライブラリが存在します。私のアドバイスは、他に本当に説得力のある理由がない限り、HttpClientを使用することです。

于 2009-08-10T16:01:56.797 に答える
3

接続が確立されたとき

URLConnection conn = url.openConnection();

url.getContentEncoding()を介してエンコードメソッド名を取得できるため、この文字列をInputStreamReader()に渡して、コードが次のようになるようにします。

BufferedReader d = new BufferedReader(new InputStreamReader(is、url.getContentEncoding()));

于 2009-08-10T16:14:16.930 に答える
1

簡単な答えはURLConnection.getContentEncoding()です。正しい答えは、cletusが提案していることです。やむを得ない理由がない限り、適切なサードパーティのライブラリを使用してください。

于 2009-08-10T16:23:21.980 に答える
0

私は最近解決すべき非常によく似た問題を抱えていました。他の回答と同様に、私もHttpClientなどで遊んでいました。ただし、これらのライブラリでは、ダウンロードするファイルのエンコーディングを事前に知っている必要があります。そうしないと、取得したHTMLファイルを変換すると、判読できない文字になります。

HTMLファイルのエンコーディングはHTMLファイル自体でのみ指定されているため、このアプローチは機能しません。HTMLのバージョンに応じて、エンコーディングはXMLヘッダー、2つの異なるヘッドメタタグ要素など、さまざまな方法で指定されます。このアプローチに従う場合は、次のことを行う必要があります。

  1. ファイルをダウンロードし、コンテンツを見て、HTMLコンテンツを解析してエンコーディングを理解します。
  2. ファイルをもう一度ダウンロードして、適切なエンコーディングを指定します。

特に、適切なエンコーディング文字列のためにHTMLコンテンツを解析すると、エラーが発生しやすくなります。代わりに、 JSoupのようなライブラリに依存することをお勧めします。JSoupがその役割を果たします。したがって、httpclientを介してファイルをダウンロードする代わりに、JSoupを使用してファイルを取得してください。さらに、JSoupは、HTMLページのさまざまな部分(ページタイトルなど)に直接アクセスするための優れたAPIを提供します。

于 2013-02-12T21:34:03.853 に答える