位置: 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算力思考

  • vivo手机地震预警在哪里打开(vivo手机地震预警暂不支持的地区)

    vivo手机地震预警在哪里打开(vivo手机地震预警暂不支持的地区)

  • 华为手机阅读模式怎么关闭(华为手机阅读模式在哪里设置)

    华为手机阅读模式怎么关闭(华为手机阅读模式在哪里设置)

  • 联想电脑win10无限重启(联想电脑win10无法读取U盘)

    联想电脑win10无限重启(联想电脑win10无法读取U盘)

  • 移动机顶盒错误代码92114(移动机顶盒错误代码10071)

    移动机顶盒错误代码92114(移动机顶盒错误代码10071)

  • airpods不弹窗口可以正常使用(airpods.不弹窗)

    airpods不弹窗口可以正常使用(airpods.不弹窗)

  • 惠普显示器是谁代工的(惠普显示器质量怎么样)

    惠普显示器是谁代工的(惠普显示器质量怎么样)

  • 微信怎么取消未读消息小红点(微信怎么取消未满十八岁游戏限制)

    微信怎么取消未读消息小红点(微信怎么取消未满十八岁游戏限制)

  • 手机没贴膜有划痕去除(手机没贴膜有划痕了怎么办oppo)

    手机没贴膜有划痕去除(手机没贴膜有划痕了怎么办oppo)

  • 青桔单车拆锁会定位吗(青桔单车锁内部结构)

    青桔单车拆锁会定位吗(青桔单车锁内部结构)

  • 抖音币充值安卓和苹果是一样的吗(抖音币充值平台app)

    抖音币充值安卓和苹果是一样的吗(抖音币充值平台app)

  • volte要不要关闭

    volte要不要关闭

  • 三星s10文档扫描功能(三星s8文档扫描功能)

    三星s10文档扫描功能(三星s8文档扫描功能)

  • 手机壳对手机发语音影响吗(手机壳会使手机更容易发热)

    手机壳对手机发语音影响吗(手机壳会使手机更容易发热)

  • 抖音共同好友怎么来的(抖音共同好友怎么看不了)

    抖音共同好友怎么来的(抖音共同好友怎么看不了)

  • 性能测试三大指标(性能测试介绍)

    性能测试三大指标(性能测试介绍)

  • 锁屏键是哪个(联想笔记本电脑锁屏键是哪个)

    锁屏键是哪个(联想笔记本电脑锁屏键是哪个)

  • windows7怎么一键还原(windows7怎么一键关机)

    windows7怎么一键还原(windows7怎么一键关机)

  • 电脑微信摄像头怎么开(电脑微信摄像头打不开)

    电脑微信摄像头怎么开(电脑微信摄像头打不开)

  • 暴风影音如何剪辑视频(暴风影音如何剪辑音频)

    暴风影音如何剪辑视频(暴风影音如何剪辑音频)

  • 华为p30怎么设置屏幕亮的时间(华为p30怎么设置24小时)

    华为p30怎么设置屏幕亮的时间(华为p30怎么设置24小时)

  • 嗨来电怎么设置不了(嗨来电怎么设置来电闪光灯)

    嗨来电怎么设置不了(嗨来电怎么设置来电闪光灯)

  • 电池健康最大容量(电池健康最大容量90%)

    电池健康最大容量(电池健康最大容量90%)

  • vivonex像素多少万(vivonex3像素)

    vivonex像素多少万(vivonex3像素)

  • 美图t9是双卡双待的吗(美图手机双卡双待的是哪一款)

    美图t9是双卡双待的吗(美图手机双卡双待的是哪一款)

  • 苹果非原装电池的坏处(苹果非原装电池弹窗)

    苹果非原装电池的坏处(苹果非原装电池弹窗)

  • 【css】svg修改图标颜色(svg怎么改大小)

    【css】svg修改图标颜色(svg怎么改大小)

  • 待处理财产损益借方
  • 预付和预收可以合并吗
  • 执行企业会计准则类别是什么意思
  • 优惠政策所得税计算
  • 工资扣水电费怎么算
  • 房地产土地使用权是无形资产吗
  • 计提工会经费为什么是增项
  • 如何进行银行存款的实质性程序
  • 辅导期纳税人会计处理
  • 可控费用包括工资吗
  • 员工的油费补贴怎么算
  • 购买的职业险计入哪个科目
  • 存货 科目
  • 旅游业开票问题总结二
  • 应收账款的贷方反映
  • 怎么防止接受虚开增值税发票?
  • 生产调试消耗原材料如何做账?
  • 联营企业分得的利润应计入什么科目
  • 微信占用空间大是怎么回事
  • 施工企业会计制度有哪些
  • 国有资产租赁合同问题
  • 国家高新技术企业认定评分标准
  • 先支付后收到发票怎么做账
  • uniapp h5发布
  • 公对公如何转账不用开票
  • 销项负数发票怎么报税
  • 企业办理银行结汇流程
  • 先付费后收到发票怎么做分录
  • 其他存货包括哪些内容
  • 劳务报酬怎么做帐
  • 土地出资是否涉及企业所得税
  • 深度学习中的注意力机制模型及代码实现(SE Attention、CBAM Attention)
  • 企业所得税利息费用的扣除标准
  • opencv模板匹配多目标旋转
  • es6箭头函数写法
  • php怎么调用图片
  • columninfo
  • 专票认证期限多长时间
  • 行政事业单位固定资产划拨账务处理
  • 金蝶k3固定资产如何入账
  • 扶贫资金入股问题
  • 境外捐赠入账
  • python socketio
  • mongodb数据库操作遇到的问题和解决方案
  • 经营费用包括工资吗
  • 路桥费税率是几个点
  • 企业分期收款销售商品,即商品已经交付
  • 资产评估机构可以评估土地吗
  • 商标权属于什么科目
  • 企业破产作用
  • 企业土地补偿款如何做账
  • 材料的什么加上什么构成了材料的实际采购成本
  • 财务费用利息收入怎么记账
  • 体检费用开发票给公司怎么开
  • 会计建账的步骤
  • 冲减和冲销的会计分录
  • mysql 性能调优参数
  • sqlserver1053怎么解决
  • mysql的行转列
  • navicat远程连接oracle
  • win8.1 multiple edition
  • win8系统笔记本怎么恢复出厂设置
  • xp系统打开软件慢怎么解决
  • windows任务管理器调用的方法
  • intel的me
  • windows 托盘
  • .sfx.exe是什么文件
  • win10系统声音怎么打开
  • win8系统崩溃无法开机
  • linuxat命令的用法
  • python中myf
  • jqueryui dialog
  • javascript的
  • 浅谈一下新冠的好处
  • android获取网络数据
  • 如何用python写自动化脚本
  • 陕西国税电子税务局app
  • 国家税务贵州省税务
  • 工会经费收支办法2022新政策
  • 盐城企退人员养老金调整新标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设