android 文件上傳,中文utf-8編碼


要上傳文件到后台的php服務器,服務器能收到中文,手機發送過去,卻只能收到一堆轉了UTF-8的編碼(就是要decode后才是中文的編碼).android這邊上傳文件通常是用stream方式上傳的,用MultipartEntity這個開源包來上傳了會有編碼問題.

首先設置字段的編碼


//CustomMultiPartEntity entity=new CustomMultiPartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,null,Charset.forName("UTF-8"),listener);
//不需要構造函數,只要對應的文字是utf-8編碼,傳輸是utf-8編碼就可以
CustomMultiPartEntity multipartContent = new CustomMultiPartEntity(listener); entity.addPart(title,
new StringBody(message,Charset.forName("UTF-8"))); entity.addPart(fileName,new FileBody(uploadFile)); listener.total(uploadFile.length());

 

http傳輸的編碼

public static String getUploadRequest(String url,MultipartEntity entity){
        String result=null;
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
        try {            
            HttpParams params = httpclient.getParams();
            params.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, Charset.forName("UTF-8"));/API 識別 charset
            HttpConnectionParams.setConnectionTimeout(params, 10*1000); //連接超時
            HttpConnectionParams.setSoTimeout(params, 10*1000);             //讀取數據超時
            httppost.setEntity(entity);
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity resEntity = response.getEntity();
            if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
                result = EntityUtils.toString( resEntity, HTTP.UTF_8);
                Log.e(TAG, "result:"+result);
                return result;
            }
            if(resEntity!=null){
                resEntity.consumeContent();
            }
            httpclient.getConnectionManager().shutdown();
            return result;          
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return null;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM