位置: IT常识 - 正文

Request获取请求数据中文乱码问题

编辑:rootadmin
Request获取请求数据中文乱码问题

目录

一、当Request请求字母时,输出正常

二、当Request请求参数为汉字时

三、使用伪代码了解乱码的形成

URL编码

四、Request请求参数中文乱码-Post请求解决方案

五、Request请求参数中文乱码-Get请求解决方案


推荐整理分享Request获取请求数据中文乱码问题,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

前言:Tomcat在7以及更低版本时,解析中文的字符集默认为ISO-8859-1,并且是在底层写死的,所以浏览器发送Get请求或者时Post请求时,字符集格式不匹配,从而引发中文乱码。但是Tomcat更新到8版本后,默认字符集就更换为了UTF-8。

一、当Request请求字母时,输出正常package com.huanle.web;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * @author 欢了 * @version 1.0 */@WebServlet("/req3")public class RequestDemo3 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("==========字母情况下==========="); String username = request.getParameter("username"); System.out.println(username); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }}

 启动Tomcat 在输入框 姓名里 输入字母abc

 点击提交跳转到上面代码开始执行

控制台打印abc

一切正常

二、当Request请求参数为汉字时

启动Tomcat 在姓名框中输入中文  张三

跳转页面

看控制台的输出

 输入的张三在控制台里呈现的就是乱码

三、使用伪代码了解乱码的形成

解决乱码问题之前,首先我们要了解乱码的形成。

我们写一个测试类,里面用到了URL编码,我们先了解一下;

URL编码

1. 将字符串按照编码格式转为二进制

2.每个字节转为2个16进制数,并在前面加上 %

例如  张三

Request获取请求数据中文乱码问题

假设浏览器给Tomcat发送的字符集格式为UTF-8,即编码格式为UTF-8;Tomcat也用UTF-8来接收,即解码格式也为UTF-8,那么就可以正常的接收到  "张三" 。

但是由于tomcat的默认解码是ISO-8859-1,并且还是底层是写死的,就只能走下面示例tomcatDecode对象(乱码)。

tomcatDecode对象直接转UTF-8虽然会出问题,但是底层的二进制是不会变的,我们就有了一个思路:

先将tomcatDecode的解码%E5%BC%A0%E4%B8%89 转为字节数组(-27 -68 -96 -28 -72 -119)

再将字节数组转为字符串。

package com.huanle.web;import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder;/** * @author 欢了 * @version 1.0 * * 演示浏览器的URL编码 和 tomcat的URL解码 * 以及解决默认tomcat字符集中文乱码 */public class UrlDemo { public static void main(String[] args) throws UnsupportedEncodingException { String username = "张三"; //URL编码 String encode = URLEncoder.encode(username, "UTF-8"); System.out.println(encode);//%E5%BC%A0%E4%B8%89 //URL解码 String decode = URLDecoder.decode(encode, "UTF-8"); System.out.println(decode);//张三 //但是tomcat的默认解码是ISO-8859-1,并且底层是写死的 String tomcatDecode = URLDecoder.decode(encode, "ISO-8859-1"); System.out.println(tomcatDecode); /** * 解决get请求的中文乱码 * 将tomcat的乱码,先用tomcat默认的字符集ISO-8859-1转为字节数组 编码 * 再将字节数组转为字符串 解码 * */ byte[] bytes = tomcatDecode.getBytes("ISO-8859-1"); //可以先遍历看一下 for (byte b : bytes) { System.out.print(b + " "); }//-27 -68 -96 -28 -72 -119 //换行 System.out.println(); //将这些十进制转为字符串 String s = new String(bytes, "UTF-8"); System.out.println(s);//张三 }}

最终的结果如下:

 

 四、Request请求参数中文乱码-Post请求解决方案

讲完上面的案例,大家也就知道为什么中文会出现乱码了,我们就在代码中解决

因为Post是通过流的getReader()方法来传输数据,只需要改变流的编码格式为utf-8即可

我们需要用到一个方法   setCharacterEncoding("");        //这里的参数是编码格式

启动Tomcat 姓名为   张三

跳转页面后没有显示请求参数 ,所以是Post请求

 

package com.huanle.web;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * @author 欢了 * @version 1.0 * * 中文乱码解决方案 */@WebServlet("/req4")public class RequestDemo4 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.先解决乱码问题Post,因为Post是通过流getReader()方法 传输数据,改变流的编码格式为utf-8 request.setCharacterEncoding("utf-8"); //2.获取username System.out.println("==========获取username========="); String username = request.getParameter("username"); System.out.println("解决后" + username); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }}

 

输出正常! 解决~

五、Request请求参数中文乱码-Get请求解决方案

get请求就很像我们举得测试类里的例子

先将乱码的数据转成字节数组

再将字节数组转成字符串

package com.huanle.web;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * @author 欢了 * @version 1.0 * * 中文乱码解决方案 */@WebServlet("/req4")public class RequestDemo5 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获取username System.out.println("==========获取username========="); String username = request.getParameter("username"); System.out.println("解决前:" + username); //2.解决乱码问题Get Get是通过getQueryString // 乱码原因,tomcat进行URL解码的时候用的是ISO-8859-1的字符集,和页面字符集不匹配 // 解决方案: // 2.1 先将乱码的数据转成字节数组 // 2.2 再将字节数组转成字符串 byte[] bytes = username.getBytes("ISO-8859-1"); String s = new String(bytes, "UTF-8"); System.out.println("解决后:" + s); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); }}

 启动Tomcat

跳转页面,有显示参数,表明是Get请求

 

 输出正常!解决~

本文链接地址:https://www.jiuchutong.com/zhishi/295184.html 转载请保留说明!

上一篇:uni-app 从0 到 1 制作一个项目,收藏等于学会(uni-app实战教程)

下一篇:【创作赢红包】ChatGPT引爆全网引发的AI算力思考

  • 抖音怎么不发布保存视频(抖音怎么不发布保存照片)

    抖音怎么不发布保存视频(抖音怎么不发布保存照片)

  • 网络异常聊天结束(网络异常聊天结束图片)

    网络异常聊天结束(网络异常聊天结束图片)

  • 抖音视频不能保存本地(抖音视频不能保存)

    抖音视频不能保存本地(抖音视频不能保存)

  • 优酷扫一扫二维码在哪里(优酷扫一扫二维码登录在哪里)

    优酷扫一扫二维码在哪里(优酷扫一扫二维码登录在哪里)

  • 全民k歌播放器异常怎么回事(全民k歌播放器在哪里)

    全民k歌播放器异常怎么回事(全民k歌播放器在哪里)

  • 天猫超市迟到赔付规则(天猫超市迟到赔付怎么操作)

    天猫超市迟到赔付规则(天猫超市迟到赔付怎么操作)

  • 序列号c开头的是什么机型(序列号c开头的苹果)

    序列号c开头的是什么机型(序列号c开头的苹果)

  • 微信辅助验证是什么(微信辅助验证是几位数)

    微信辅助验证是什么(微信辅助验证是几位数)

  • 手机屏幕摔碎出现黑块(手机屏幕摔碎出现条纹怎么自修)

    手机屏幕摔碎出现黑块(手机屏幕摔碎出现条纹怎么自修)

  • qq点赞前面的小图标怎么设置(qq点赞前面的小图标不见了)

    qq点赞前面的小图标怎么设置(qq点赞前面的小图标不见了)

  • 网易云音乐移除粉丝对方知道吗(网易云音乐移除对方关注)

    网易云音乐移除粉丝对方知道吗(网易云音乐移除对方关注)

  • 美团商家不处理退款怎么办(美团商家不给退怎么办)

    美团商家不处理退款怎么办(美团商家不给退怎么办)

  • ipad能加存储卡吗(ipad可以加tf卡吗)

    ipad能加存储卡吗(ipad可以加tf卡吗)

  • 已购买成功的淘宝订单怎么删除(淘宝已购买宝贝)

    已购买成功的淘宝订单怎么删除(淘宝已购买宝贝)

  • 飞行模式可以接打电话吗(飞行模式可以接电话打电话吗)

    飞行模式可以接打电话吗(飞行模式可以接电话打电话吗)

  • ps如何缩小选区(ps如何缩小选区中一个像素)

    ps如何缩小选区(ps如何缩小选区中一个像素)

  • 手机怎么制作铃声(如何手机制作铃声)

    手机怎么制作铃声(如何手机制作铃声)

  • 抖音几点发容易上热门(抖音几点发容易有浏览量)

    抖音几点发容易上热门(抖音几点发容易有浏览量)

  • 安卓手机可以用苹果无线耳机吗(安卓手机可以用几年)

    安卓手机可以用苹果无线耳机吗(安卓手机可以用几年)

  • 乐橙监控连接手机步骤(乐橙监控连接手机步骤多人共享)

    乐橙监控连接手机步骤(乐橙监控连接手机步骤多人共享)

  • 华为mate30是2k屏吗(mate30pro 2k屏)

    华为mate30是2k屏吗(mate30pro 2k屏)

  • 360浏览器如何截图(360浏览器如何截视频)

    360浏览器如何截图(360浏览器如何截视频)

  • 手机hd怎么关(手机hd怎么关闭)

    手机hd怎么关(手机hd怎么关闭)

  • 关于CPU和GPU版本共存下的安装Pytorch(跑YOLO模型)(cpu和gpu性能对比)

    关于CPU和GPU版本共存下的安装Pytorch(跑YOLO模型)(cpu和gpu性能对比)

  • 非营利组织企业所得税
  • 车辆使用费属于什么税收分类
  • 中级税务师报名条件
  • 开发票,对方收取税点,如何计算
  • 其他应收款贷方余额表示什么
  • 租的厂房水电费开不了发票怎么办
  • 金融服务征税范围包括哪些
  • 电影院场地出租价格
  • 跨年的发票作废账务如何处理
  • 工资分开发的奖金具体个税是多少?
  • 无形资产计提减值准备账务处理
  • 买机票返钱
  • 土地使用权如何办理
  • 应交所得税的计算例题
  • 企业所得税季度纳税申报表 a类
  • 以前年度损益调整属于哪类科目
  • 单位给职工租房属于福利政策文件
  • 购进一台空调会计分录
  • 航空公司按照一次性收费
  • 向员工发放用餐费的通知
  • 赊购商品一批
  • 结转开发产品
  • 银行承兑汇票开票流程图
  • 贸易公司购入商品会计分录
  • 低于账面价值出售固定资产时下列哪项会下降
  • 设备租赁收入属于什么收入
  • 旅游业小规模纳税人亏损怎么填报
  • linux查杀webshell
  • 退税收入计入营业外收入吗
  • 应付职工薪酬包括个人社保和个税吗
  • 员工意外伤害保险怎么买
  • win11不显示桌面,但是有文件夹打开的标志是怎么回事
  • 公司员工私车公用协议要签吗
  • win 7系统如何备份
  • c 盘清理
  • win10网页打不开但是有网
  • 公司收到医疗保障事务中心的转账
  • 调入的无形资产记入哪里
  • 银行存款缴纳房产税会计分录
  • 发放职工薪酬的账务处理
  • node.js如何安装
  • 期间费用计算公式
  • 微信小程序登录的账号怎么注销
  • php添加
  • vue pending
  • cifar10图像分类实验报告
  • 鲜花售卖系统
  • vue2-elm
  • 外贸公司美金账户维护费用
  • 外管证预缴税款上报后,怎么交税
  • PHP魔术方法的作用
  • 公司处置已使用4年多的汽车,怎么增值税申报
  • 利息支出是利息费用减利息收入吗
  • 公司签发银行承兑汇票的行为属于什么
  • sql模糊查询的关键字是什么
  • 个人所得税专项附加扣除2023
  • 收到现金股利是什么意思
  • sql server 防止表锁死
  • 收回已确认并转销的应收账款会导致坏账准备的金额增加
  • 销项100万进项80万交多少税
  • 印花税计入相关资产成本吗
  • 私立幼儿园规模标准
  • 发行优先股的发行费用
  • 营改增账务处理实例
  • 报销冲抵什么意思
  • 公司建账初期做账怎么做
  • 教育机构的咨询
  • 年底奖金怎么入账
  • 新准则融资租赁承租人的会计处理
  • mysql安装出问题
  • win7开机启动
  • windows需要更新吗?
  • freebsd重置密码
  • js跨域解决方案有哪些
  • javascript中math.ceil
  • shell脚本编写的基本知识
  • 网页css加载失败
  • python3 args
  • linux安装nodejs xz格式
  • windows python2和python3共存
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设