因爲tomcat對中文支持不是很好,因此在某些狀況下致使URL沒法訪問或者找不到路徑的問題,通常主要存在兩個問題: tomcat
上傳一個資源到服務器後,經過鏈接沒法進行訪問,進行幾回嘗試以後,發現若是URL包含中文字符則沒法訪問,而純英文字符的URL則能夠訪問。發現是tomcat默認的配置不支持中文路徑訪問,由於經過連接進行訪問時採用的是get協議,而默認的get協議是採用ISO-8859-1對URL進行編碼的,而這個字符集不支持中文雙字節信息。 服務器
在Server.xml文件中添加一個名爲URIEncoding的屬性,它定義了對HTTP請求中的get方法傳過來的URL進行編碼的採用的方案。 編碼
在Tomcat安裝目錄下找到server.xml文件,找到 url
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> spa
在裏面加入URIEncoding="utf-8" 這個屬性,保存,而後重啓tomcat便可。 code
在下載一個mp3文件的時候,若是它的資源URL爲"http:10.0.0.2:8080/MusicServer/resource/今天 - 劉德華.mp3",路徑中含有空格和中文字符,會報找不到該資源的錯誤。報這種錯誤主要有兩個緣由:1)沒有對中文部分進行轉碼;2)路徑中空格要進行轉換。 server
例如: xml
String urlString="http:10.0.0.2:8080/MusicServer/resource/今天 - 劉德華.mp3"; String name="今天 - 劉德華.mp3"; String temp1=URLEncoder.encode(name, "UTF-8"); System.out.println(temp1);
輸出結果爲:%E4%BB%8A%E5%A4%A9+-+%E5%88%98%E5%BE%B7%E5%8D%8E.mp3 utf-8
發現空格被轉碼成'+'了,而在tomcat服務器中,空格是'%20',因此會致使沒法訪問到該路徑,能夠採用下面的辦法解決問題: 資源
首先將中文部分轉碼成UTF-8格式的字符串,而後將轉換後獲得的字符串中的全部'+'替換成'%20'。
String urlString="http:10.0.0.2:8080/MusicServer/resource/今天 - 劉德華.mp3"; String name="今天 - 劉德華.mp3"; String temp1=URLEncoder.encode(name, "UTF-8"); String temp2=temp1.replaceAll("\\+", "%20"); //由於'+'是關鍵字,因此要進行轉義System.out.println(temp1); System.out.println(temp2);
輸出結果就爲:
%E4%BB%8A%E5%A4%A9+-+%E5%88%98%E5%BE%B7%E5%8D%8E.mp3
%E4%BB%8A%E5%A4%A9%20-%20%E5%88%98%E5%BE%B7%E5%8D%8E.mp3
是正確的結果了。