使用httpclient有一种方法来获取具有HEAD请求的页面的字符集吗?

时间:2010-07-09 21:37:06

标签: java httpclient

我正在使用httpclient库执行基本的HEAD请求。我很好奇我怎么能得到apache返回的字符集E.g。:utf-8,iso-8859-1等... 谢谢!

  HttpParams httpParams = new BasicHttpParams();
  HttpConnectionParams.setConnectionTimeout(httpParams, 2000);
  HttpConnectionParams.setSoTimeout(httpParams, 2000);

  DefaultHttpClient httpclient = new DefaultHttpClient(httpParams);
  httpclient.getParams().setParameter("http.useragent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");

  HttpContext localContext = new BasicHttpContext();
  httpget = new HttpHead(url); 

  HttpResponse response = httpclient.execute(httpget, localContext);

  this.sparrowResult.statusCode = response.getStatusLine().getStatusCode();

工作结果更新

Header contentType = response.getFirstHeader("Content-Type");
String charset= contentType.getValue();

4 个答案:

答案 0 :(得分:18)

如果使用HttpClient 4.2

import java.nio.charset.Charset;
import org.apache.http.entity.ContentType;

ContentType contentType = ContentType.getOrDefault(entity);
Charset charSet = contentType.getCharset();

答案 1 :(得分:4)

如果使用HttpClient 4.1(最新版):

import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

String charset = EntityUtils.getContentCharSet(entity);
if (charset == null) {
    charset = HTTP.DEFAULT_CONTENT_CHARSET;
}

答案 2 :(得分:2)

HTTP 1.1中的

,字符集位于Content-Type标题

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8

所以应该埋没在

HttpResponse.Headers

所以,这应该有用

HttpResponse.Headers.["Content-Type"]

**没有测试过这个,但你明白了

答案 3 :(得分:1)

在某些情况下,服务器不会在标题中为您提供字符集,但会在内容中写入,例如:这个网址:http://seniv.dlmostil.ru/jacket/p/kupit-sportivnie-bryki-adidas-s-dostavkoy/

当你这样做时

if...end if

然后charSet为 null

在这种情况下,我读取了流并尝试使用正则表达式从html代码中提取charSet,因此当您将输入流中的内容读入

ContentType contentType = ContentType.getOrDefault(entity); 
Charset charSet = contentType.getCharset();

然后你可以这样做:

ByteArrayOutputStream out = new ByteArrayOutputStream();

我希望当所有其他方法都不起作用时,你会明白最后一个退出。