日期:2014-05-17  浏览次数:20672 次

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="2??μμ?.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);
        // 设置