前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android和服务器的URLEncodedUtils乱码编码问题的解决方案

android和服务器的URLEncodedUtils乱码编码问题的解决方案

作者头像
砸漏
发布2020-11-04 09:39:36
8690
发布2020-11-04 09:39:36
举报
文章被收录于专栏:恩蓝脚本

在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 所有我们要再次转码。需要两次转码,下边就是服务器转码代码

代码语言:javascript
复制
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”

今天折腾了两个小时就为了解决这个中文乱码问题。

下面是解决代码:

服务器端:

代码语言:javascript
复制
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");
......(此处省去操作数据代码)
}

客户端:

代码语言:javascript
复制
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

不要理params,这个是发送给服务器的数据包。主要是HTTP.UTF_8

问题就解决了。不要搞GBK这个编码,这个编码会存在各种问题的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。如果你想了解更多相关内容请查看下面相关链接

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档