要上傳文件到后台的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; }