httpClient怎么取得编码的问题

fuyou001 2009-09-19 11:17:16
/*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/

package org.apache.http.examples.client;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

/**
* This example demonstrates how to abort an HTTP method before its normal completion.
*/
public class ClientAbortMethod {

public final static void main(String[] args) throws Exception {
HttpClient httpclient = new DefaultHttpClient();

HttpGet httpget = new HttpGet("http://www.baidu.com");

System.out.println("executing request " + httpget.getURI());
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();

System.out.println("----------------------------------------");
System.out.println(response.getStatusLine().getStatusCode());

if (entity != null) {
System.out.println("Response content length: " + entity.getContentLength());
System.out.println("content-type:" +entity.getContentType().getValue());

}
System.out.println("----------------------------------------");

// Do not feel like reading the response body
// Call abort on the request object
httpget.abort();

// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}

}



结果 :

executing request http://www.baidu.com
----------------------------------------
200
Response content length: 3509
content-type:text/html
----------------------------------------
用网面打开www.baidu.com 编码会自动设置成GB312
为什么httpClient里没取得编码

看下了其源代码头 ,httpClient 没用java 里URLconnection 去实现,而是用最底层的socket 去实现的

要怎么要才取得content-type里的charset ???
...全文
675 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
GK20182 2010-10-23
  • 打赏
  • 举报
回复
如果content-type中没有设置编码的话,entity.getContentType()中是获取不了编码的值。

浏览器是先从content-type的charset(响应头信息)中获取编码,如果获取不了,则会从meta(HTML里的代码)中获取charset的编码值,如7楼所示。
qingkangxu 2009-09-21
  • 打赏
  • 举报
回复
httpget.getRequestHeader("Content-Type");
然后自己找
“charset=”后面的字符串就是编码/
amdgaming 2009-09-20
  • 打赏
  • 举报
回复
帮顶。
fuyou001 2009-09-20
  • 打赏
  • 举报
回复
没人遇到过吗
fuyou001 2009-09-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 java_lover_coming 的回复:]
你是不是想取得服务器返回头信息呀
我也在这个方面碰到问题,不过是编码问题,服务器返回的是乱码(除头信息以外)
帮顶 一下
[/Quote]

就是啊,它没有取得编码的方法,我又看了源代码,也没看到

期待解决方法。。。
yztommyhc 2009-09-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/yztommyhc/archive/2009/01/13/3765193.aspx

这个我以前写的博客,希望对解决这个问题有帮助。。。
yztommyhc 2009-09-20
  • 打赏
  • 举报
回复
content-type里的charset应该是在java-URLconnection取得的源文件吧。

浏览器选择用何种编码打开网页时根据源文件中的charset的,这个你用URLconnection取得的源文件是有的啊。就像你用浏览器,点“查看”--》“源文件”,看到文件上方
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>httpClient怎么取得编码的问题</title>
<link href="http://c.csdn.net/bbs/t/5/t5.css" rel="stylesheet" type="text/css" />
<link href="http://www.csdn.net/images/favicon.ico" rel="SHORTCUT ICON" />
这个就是本网页的头文件,你代码解析其中的红色部分不就行了么。
java_lover_coming 2009-09-20
  • 打赏
  • 举报
回复
你是不是想取得服务器返回头信息呀
我也在这个方面碰到问题,不过是编码问题,服务器返回的是乱码(除头信息以外)
帮顶 一下
fuyou001 2009-09-20
  • 打赏
  • 举报
回复
顶下
fuyou001 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gesanri 的回复:]
没用过这个,有没有getCharacterEncoding方法啊
[/Quote]

我看了api 没有看到
gesanri 2009-09-19
  • 打赏
  • 举报
回复
没用过这个,有没有getCharacterEncoding方法啊

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧