問題描述
當Java調用getResource方法,但是因為路徑中含有中文時,得不到正確的路徑
問題分析
編碼轉換問題
當我們使用ClassLoader的getResource方法獲取路徑時,獲取到的路徑被URLEncoder.encode(path,"utf-8")編碼了,當路徑中存在中文和空格時,他會對這些字符進行轉換,這樣,得到的往往不是我們想要的真實路徑,所以我們可以調用URLDecoder.decode()方法進行解碼,以便得到原始的中文及空格路徑。
相關知識
URLEncoder.encode(String s, String enc)
使用指定的編碼機制將字符串轉換為 application/x-www-form-urlencoded 格式
URLDecoder.decode(String s, String enc)
使用指定的編碼機制對 application/x-www-form-urlencoded 字符串解碼。
發送的時候使用URLEncoder.encode編碼,接收的時候使用URLDecoder.decode解碼,都按指定的編碼格式進行編碼、解碼,可以保證不會出現亂碼
解決辦法
String packagePath = url.getPath().replaceAll("%20","");//解決路徑中含有空格的情況
packagePath = java.net.URLDecoder.decode(packagePath,"utf-8"); //解決路徑包含中文的情況
注意,正常情況下第一句是不需要的,第二句可以完成所有的工作。