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 Parameter("runame").getBytes("ISO_8859-1"),"UTF-8");
那么⽤URLEncodedUtils编码发送数据的⼀套代码如下
安卓:String str=URLEncodedUtils.format( 封装好的Parameters数据,"UTF-8");
java服务器:String=new Parameter("runame").getBytes("ISO_8859-1"),"UTF-8");
runame是封装好的数据中的⼀个字段;
下⾯是关于url解码的⼀些东西:
第⼀种⽅式指定编码UTF-8
传递页⾯
获取页⾯
String name=new Patameter(name).getBytes("ISO_8859-1"),"UTF-8");
或者传递页⾯
获取页⾯
String name=new Patameter(name).getBytes("ISO_8859-1));
第⼆种⽅式是没有指定编码的,按平台默认的编码。url编码和utf8区别
不能写成传递页⾯
获取页⾯
String name=new Patameter(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 = Writer();
request.setCharacterEncoding("utf-8");
......(此处省去操作数据代码)
}
客户端:
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
不要理params,这个是发送给服务器的数据包。主要是HTTP.UTF_8
问题就解决了。不要搞GBK这个编码,这个编码会存在各种问题的。
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。如果你想了解更多相关内容请查看下⾯相关链接
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论