android和服务器的URLEncodedUtils乱码编码问题的解决方案
在android开发中我们常常遇到与到乱码问题,遇到乱码问题首先我们要先检查两端编码格式是否一致!
一般我们提交数据用get 和post方法,这两种方法在上传中有con.setrequestproperty("charset", "utf-8");
和httppost.setentity(new urlencodedformentity(数据,"utf-8"));
这两中方式来确定编码方式服务器端有request.setcharacterencoding("utf-8");response.setcharacterencoding("utf-8");来确定响应的编码格式。这样一般是不会出现乱码,如果出现乱码我们还可以建立一个过滤器来过滤乱码,在这里我不讲过滤器,改天再单独说一下过滤器。
今天我想说的是关于在post传递参数,在路径后+?+参数传递方式,然后传递后的接受乱码问题。
首先我们安卓端要封装数据string str=urlencodedutils.format( 封装好的parameters数据,"utf-8"); 然后默认utf-8编码,然后httppath.fabu_path+"?"+str 把数据接在路径下边用post方式提交。在这里用了urlencodedutils将数据编码了。
接下来说的是服务器接受问题。服务器接受数据后会进行默认的转码,tomact的默认转码格式是iso_8859-1 所有我们要再次转码。需要两次转码,下边就是服务器转码代码
string=new string(request.getparameter("runame").getbytes("iso_8859-1"),"utf-8");
那么用urlencodedutils编码发送数据的一套代码如下
安卓:string str=urlencodedutils.format( 封装好的parameters数据,"utf-8");
java服务器: string=new string(request.getparameter("runame").getbytes("iso_8859-1"),"utf-8");
runame是封装好的数据中的一个字段;
下面是关于url解码的一些东西:
第一种方式指定编码utf-8
传递页面
urlencoder.encode(name,"utf-8")
获取页面
string name=new string(request.getpatameter(name).getbytes("iso_8859-1"),"utf-8");
或者传递页面
urlencoder.encode(name);
获取页面
string name=new string(request.getpatameter(name).getbytes("iso_8859-1));
第二种方式是没有指定编码的,按平台默认的编码。
不能写成传递页面
urlencoder.encode(name,"utf-8")
获取页面
string name=new string(request.getpatameter(name).getbytes("iso_8859-1));
这样的话有可能出现乱码。因为你不知道平台的编码是什么。
所以只能按第一或者第二种形式,java推荐我们用第一种指定编码“utf-8”
今天折腾了两个小时就为了解决这个中文乱码问题。
下面是解决代码:
服务器端:
public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { response.setcontenttype("text/html"); response.setcharacterencoding("utf-8"); printwriter out = response.getwriter(); request.setcharacterencoding("utf-8"); ......(此处省去操作数据代码) }
客户端:
request.setentity(new urlencodedformentity(params, http.utf_8));
不要理params,这个是发送给服务器的数据包。主要是http.utf_8
问题就解决了。不要搞gbk这个编码,这个编码会存在各种问题的。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
推荐阅读
-
PHP utf-8和gb2312编码转换乱码的问题
-
Android编程向服务器发送请求时出现中文乱码问题的解决方法
-
Android编程向服务器发送请求时出现中文乱码问题的解决方法
-
android POST数据遇到的UTF-8编码(乱码)问题解决办法
-
android和服务器的URLEncodedUtils乱码编码问题的解决方案
-
android端调用jni接口和c++交互时产生的编码问题 编码unicodeandroid
-
android端调用jni接口和c++交互时产生的编码问题 编码unicodeandroid
-
PHP utf-8和gb2312编码转换乱码的问题_PHP教程
-
android POST数据遇到的UTF-8编码(乱码)问题解决办法
-
解决mysql的默认字符编码和中文乱码问题