我正在使用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();
答案 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)
,字符集位于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();
我希望当所有其他方法都不起作用时,你会明白最后一个退出。