關於Android程式設計檔案路徑中含有中文字元的問題解決辦法

Chitty_Tina發表於2016-07-18


感謝分享 http://blog.sina.com.cn/s/blog_5342e45b01012fu2.html


 在網上看到有朋友說,在Android程式設計中如果實現檔案的上傳下載過程中,如果遇到檔案路徑中有中文,比如/sdcard/測試文件.txt或者d:/計算機.xls就會丟擲FileNotFoundException的異常,很多論壇中提示大家用URLEncoder.encode()方法來解決,但是很多人在嘗試了該方法之後並沒有很好的解決問題。

    於是在跟同學交流一番後,鄙人小試一把終於解決了這個問題,在解決這個問題之前,我們先看一下有關的API,在String裡面,有個getBytes(String charsetName)方法,使用指定的字符集將此String編碼成為byte序列,提到了字符集的問題,同樣在URLEncoder.encode(String s, String enc)中也提到了相同的概念,於是我們在取得解決方案之前查了一下常用字符集。在開啟eclipse的時候,我們在視窗-首選項-常規-工作空間中看到了這個選項,於是發現文字檔案編碼為WINDOWS預設的GBK,
    於是我們在服務端把從客戶端那邊傳過來的字串path,進行了如下處理:
String newPath = URLEncoder.encode(path, "GBK");
File file = new File(newPath);
    但是發現結果還是不對,於是我們考慮是不是因為是Android客戶端那邊傳來的中文編碼有問題,測試的時候,在Android端直接對中文字串進行了不同的編碼方式,考慮到linux下面的編碼方式為UTF-8,而Android的核心為linux,做了一下測試:
    String test = "測試";
    textView1.setText((new String(test.getBytes("GBK"))));
    textView2.setText((new String(test.getBytes("UTF-8"))));

    果然GBK出來的結果是亂碼,於是,在考慮兩遍編碼方式不同的問題,我把eclipse中的文字檔案編碼改成了UTF-8以跟android裝置匹配,之後在客戶端對String格式的路徑進行getBytes("UTF-8");再進行傳輸,測試順利通過了。沒想到作業系統不同,編碼方式不同的問題成了一個障礙,另外多提一句,GBK中,一個漢字所佔位元組數是2,而UTF-8中,一個漢字所佔位元組數是3,有需要的朋友還要多多注意。



相關文章