android和服务器的URLEncodedUtils乱码编码问题的解决方案
作者:双斜杠少年 发布时间:2021-11-19 08:13:12
在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这个编码,这个编码会存在各种问题的。
来源:https://blog.csdn.net/u012373815/article/details/44699585


猜你喜欢
- 本文实例讲述了Android编程实现自定义手势的方法。分享给大家供大家参考,具体如下:之前介绍过如何在Android程序中使用手势,主要是系
- SpringBoot-JPA删除不成功,只执行了查询语句今天使用JPA自定义了一个删除方法deleteByUserIdAndCommentI
- 前言本文主要给大家介绍了关于Spring Boot优化内嵌Tomcat的相关内容,分享出来供大家参考学习,下面话不多说了,来一看看详细的介绍
- springboot启动失败的问题springboot版本是1.3.0.M1,连接的mysql版本为8,用spring-boot-start
- import java.util.ArrayList;import java.util.HashMap;import java.util.I
- 1. 对图片本身进行操作尽量不要使用 setImageBitmap、setImageResource、 BitmapFactory.deco
- 前言图形相交检测常常用在伤害判定,使用自定义的图形相交检测,可以在一定程度上控制性能。比如2D格斗游戏中使用的矩形包围盒(AABB),一些动
- 目录1.项目需求描述2.整体思路3.功能实现1.项目需求描述通过订单号获取某系统内订单的详细数据,不需要账号密码的登录验证,但有图片验证码的
- 本文实例讲述了C#实现3步手动建DataGridView的方法。分享给大家供大家参考。具体如下:DataView dvCmControlIn
- 增加了用于处理MyBatis的两个bean:SqlSessionFactoryBean、MapperFactoryBean1、注册SqlSe
- 一、内部存储内部存储,位于data/data/包名/路径下是否需要用户权限:否是否能被其他应用访问:否卸载应用数据是否被删除:是内部存储控件
- 这篇文章主要介绍了SpringBoot使用Log4j过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试。1) 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程
- 1. 简单介绍嗨,大家好,今天给想给大家分享一下关于Mybatis-plus 的 Service 层的一些方法的使用。今天没有总结,因为都是
- 相信大家在系统学习jvm的时候都会有遇到过这样的问题,散落的jvm知识点知道很多,但是真正在线上环境遇到一些莫名其妙的gc异常时候却无从下手
- 本文实例讲述了Android编程滑动效果之Gallery仿图像集浏览实现方法。分享给大家供大家参考,具体如下:Android系统自带一个Ga
- 引言设计: 嗯? 这个图片点击跳转进详情再返回图片怎么变白闪一下呢?产品: 是啊是啊! 一定是个bug开发: 囧囧囧在开发过程中, 也许你也
- 本篇随笔将讲解一下Android当中比较常用的两个布局容器--ScrollView和HorizontalScrollView,从字面意义上来
- 本文介绍了Android EasyBarrage实现轻量级弹幕效果,分享给大家,具体如下:概述EasyBarrage是Android平台的一
- 利用redis进行springSession的存储:存储:// 在session中保存用户信息 H