/*
 * ====================================================================
 * 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 ???

解决方案 »

  1.   

    没用过这个,有没有getCharacterEncoding方法啊
      

  2.   

    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" />
    这个就是本网页的头文件,你代码解析其中的红色部分不就行了么。
      

  3.   

    http://blog.csdn.net/yztommyhc/archive/2009/01/13/3765193.aspx这个我以前写的博客,希望对解决这个问题有帮助
      

  4.   

    httpget.getRequestHeader("Content-Type");
    然后自己找
    “charset=”后面的字符串就是编码/
      

  5.   

    如果content-type中没有设置编码的话,entity.getContentType()中是获取不了编码的值。浏览器是先从content-type的charset(响应头信息)中获取编码,如果获取不了,则会从meta(HTML里的代码)中获取charset的编码值,如7楼所示。