当前位置: 代码迷 >> Java Web开发 >> HttpURLConnection响应head内容的编码方式,怎么正确识别,100分
  详细解决方案

HttpURLConnection响应head内容的编码方式,怎么正确识别,100分

热度:6636   发布时间:2016-04-10 23:40:57.0
HttpURLConnection响应head内容的编码方式,如何正确识别,100分在线等
本帖最后由 JavaLover00000 于 2013-11-04 12:43:34 编辑
我用HttpUrlConnection 连接下载一个mp3
地址如下:
http://zhangmenshiting.baidu.com/data2/music/91731224/91731224.mp3?xcode=35364211a9bc8d289ad59150fa1ad1eb5dc4eabdf6e0aebb
返回的 response head中可以读取到文件名字
如下:
Content-Disposition:attachment; filename="??????.mp3"
现在我的需求是,正确识别这个filename的编码方式
这是个汉字名字,我用 new String(str.getBytes("iso-8859-1"),"gbk");
能正确的到名字,但是我希望能不是由我代码写死的来转成gbk,而是有代码或者其他方式动态识别出来

注:用浏览器访问这个地址,是可以获得正确的文件名的,指定浏览器编码方式并不会导致乱码,希望有经验的或者做过浏览器的指点指点,浏览器是如何做到的

下面是完整测试代码,拷贝即可运行:
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;


public class T1 {
    public static void main(String[] args) throws UnsupportedEncodingException, Throwable {
        String downloadUrl = "http://zhangmenshiting.baidu.com/data2/music/91731224/91731224.mp3?xcode=35364211a9bc8d289ad59150fa1ad1eb5dc4eabdf6e0aebb";
        URL url = new URL(downloadUrl);
        // 打开HttpURLConnection
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // 设置 HttpURLConnection的断开时间
        conn.setConnectTimeout(5000);
        // 设置 HttpURLConnection的请求方式
        conn.setRequestMethod("GET");
        // 设置 HttpURLConnection的接收的文件类型
        conn.setRequestProperty(
                "Accept",
                "image/gif, image/jpeg, image/pjpeg, image/pjpeg, "
                        + "application/x-shockwave-flash, application/xaml+xml, "
                        + "application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, "
                        + "application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
        // 设置 HttpURLConnection的接收语音
        conn.setRequestProperty("Accept-Language", Locale.getDefault().toString());
        // 指定请求uri的源资源地址
        conn.setRequestProperty("Referer", downloadUrl);
        // 设置 HttpURLConnection的字符编码
        conn.setRequestProperty("Accept-Charset", "UTF-8");
        // 检查浏览页面的访问者在用什么操作系统(包括版本号)浏览器(包括版本号)和用户个人偏好
//        conn.setRequestProperty(
//                "User-Agent",
//                "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2;"
//                        + " Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; "
//                        + ".NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152;"
//                        + " .NET CLR 3.5.30729)");
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36");
        conn.setRequestProperty("Connection", "Keep-Alive");
        
        conn.connect();
        
        printResponseHeader(conn);
    }
    
    private static void printResponseHeader(HttpURLConnection http) throws UnsupportedEncodingException {
        Map<String, String> header = getHttpResponseHeader(http);
        for (Map.Entry<String, String> entry : header.entrySet()) {
  相关解决方案