欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-04-29 21:10:06
在android开发中我们常常遇到与到乱码问题,遇到乱码问题首先我们要先检查两端编码格式是否一致! 一般我们提交数据用get 和post方法,这两种方法在上传中有con....

在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这个编码,这个编码会存在各种问题的。

总结

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