利用MultipartEntity上传文件碰到的中文转编码的问题.

之前碰到一个问题,要上传文件到后台的php服务器.同样的API,在iOS那边传过去,服务器能收到中文,但我这边发送过去,却只能收到一堆转了UTF-8的编码(就是要decode后才是中文的编码).我们android这边上传文件通常是用stream方式上传的,但这次后台不肯改,只收文件,那只好用MultipartEntity这个开源包来上传了,但是却遇到了编码问题.搞了很久(足足一个月了),终于在各种尝试下找到解决方法了,以下是方法,其实关键代码就一句.


CustomMultiPartEntity entity=new CustomMultiPartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,null,Charset.forName("UTF-8"),listener);
entity.addPart(title, new StringBody(message,Charset.forName("UTF-8")));
entity.addPart(fileName,new FileBody(uploadFile));
listener.total(uploadFile.length());

这个CustomMultiPartEntity是我重写过MultipartEntity的,用listener来实现监听下载百分比的.


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;
	}

然后就是添加entity的时候,记得在他之前设好parameter. 加了那一句,后台就能收到中文了.






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值