java web url編碼解碼問題(下載中文名文件)

  問題描述:須要url直接訪問中文名的文件,相似於在地址欄裏直接輸入http://localhost:8080/example/麗江旅遊攻略.doc 來進行文件下載,tomcat的server.xml文件中connector的URIEncoding配置成utf-8時,沒有問題,配置成gbk時,沒法下載,url被解析成亂碼,資源不存在。html

  查閱大量資料,更深刻的理解了url編碼解碼,分析緣由是因爲瀏覽器會默認使用utf-8對url包含的非英文字符進行編碼,而tomcat中配置的是對url的解碼方式,因此配置成utf-8時能夠正常解析,但若是配置成gbk或者gb2312時就不行了,中文被utf-8編碼,又用gbk去解碼,確定是亂碼的。沒有找到設置瀏覽器默認url編碼方式的地方,我用了的是IE9,firefox 25.0,chrome 28,不知作別的瀏覽器或版本是否是也是都用utf-8,有人說這個方法應該和頁面裏聲明的content-type,即<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>一致的,但我分析後應該不是這樣的,由於若是你直接在地址欄裏輸入url,哪裏來的頁面?!java

  解決方案:手動讓前臺編碼和後臺編碼一致。其實簡單點把tomcat的配成utf-8就能夠了。若是非要用GBK或者其餘的,能夠手動先將包含非英文字符的url進行編碼,而後再把編碼後獲得的url做爲訪問的url,java是提供了這樣方法的。以下代碼:chrome

 System.out.println( java.net.URLEncoder.encode("麗江旅遊攻略.doc",   "gbk")); 

   執行後輸出%C0%F6%BD%AD%C2%C3%D3%CE%B9%A5%C2%D4.doc。瀏覽器

  這樣就可讓a標籤的href="http://localhost:8080/example/%C0%F6%BD%AD%C2%C3%D3%CE%B9%A5%C2%D4.doc"或者別的方式使用這個url。tomcat

相關文章
相關標籤/搜索