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

  • 电子商务企业怎样做好微博营销?(电子商务企业怎么选择物流模式)

    电子商务企业怎样做好微博营销?(电子商务企业怎么选择物流模式)

  • word怎么截取其中几页(如何在word中截取部分截图)

    word怎么截取其中几页(如何在word中截取部分截图)

  • 苹果x发热严重特别卡(苹果x发热严重怎么回事)

    苹果x发热严重特别卡(苹果x发热严重怎么回事)

  • 怎么减小视频文件的大小(怎么减小视频文字字幕)

    怎么减小视频文件的大小(怎么减小视频文字字幕)

  • internet的拓扑结构是(internet的拓扑结构包括)

    internet的拓扑结构是(internet的拓扑结构包括)

  • 电脑重置后什么都没了(电脑重置后什么都点不了)

    电脑重置后什么都没了(电脑重置后什么都点不了)

  • 滴滴黑金会员消费多少(滴滴黑金会员会掉吗)

    滴滴黑金会员消费多少(滴滴黑金会员会掉吗)

  • 华为nova5pro和nova7se对比(华为nova5pro和nova6哪个好)

    华为nova5pro和nova7se对比(华为nova5pro和nova6哪个好)

  • word打字显示空白(word打字显示空白怎么办)

    word打字显示空白(word打字显示空白怎么办)

  • qq清除数据会影响相册吗(qq清除数据会影响收藏吗)

    qq清除数据会影响相册吗(qq清除数据会影响收藏吗)

  • 抖音绑定淘宝pid什么意思(抖音绑定淘宝pid怎么绑定)

    抖音绑定淘宝pid什么意思(抖音绑定淘宝pid怎么绑定)

  • qq隐身后是显示离线吗(qq隐身后是显示什么吗)

    qq隐身后是显示离线吗(qq隐身后是显示什么吗)

  • qq标识怎么绑定闺蜜关系(qq标识怎么绑定情侣关系)

    qq标识怎么绑定闺蜜关系(qq标识怎么绑定情侣关系)

  • 红米4a插内存卡没反应(红米4的内存卡是如何安放)

    红米4a插内存卡没反应(红米4的内存卡是如何安放)

  • 使用听筒播放语音是什么意思(听筒播放语音什么作用)

    使用听筒播放语音是什么意思(听筒播放语音什么作用)

  • ipad怎么长截图怎么截(苹果14怎么长图截屏)

    ipad怎么长截图怎么截(苹果14怎么长图截屏)

  • 苹果8耳机se能用吗(苹果无线耳机苹果8可以用吗)

    苹果8耳机se能用吗(苹果无线耳机苹果8可以用吗)

  • 微信该用户不存在是什么意思(微信该用户不存在图片)

    微信该用户不存在是什么意思(微信该用户不存在图片)

  • 移动网络卡顿怎么处理(移动网络卡顿怎么解决)

    移动网络卡顿怎么处理(移动网络卡顿怎么解决)

  • 怎么找天猫榜单入口(天猫榜单怎么看自己想要的东西)

    怎么找天猫榜单入口(天猫榜单怎么看自己想要的东西)

  • 手机wps绘制表格(手机wps绘制表格怎么操作)

    手机wps绘制表格(手机wps绘制表格怎么操作)

  • tcl空调可以用手机遥控吗(tcl空调用手机控制app)

    tcl空调可以用手机遥控吗(tcl空调用手机控制app)

  • 苹果xr有没有无线充电功能(苹果Xr有没有无线充电)

    苹果xr有没有无线充电功能(苹果Xr有没有无线充电)

  • 华为nova2s充电器型号(华为nova2s充电器是什么接口)

    华为nova2s充电器型号(华为nova2s充电器是什么接口)

  • 华为手机如何在桌面添加文件夹(华为手机如何在桌面显示时间和天气)

    华为手机如何在桌面添加文件夹(华为手机如何在桌面显示时间和天气)

  • Mac qq音乐怎么下载歌曲(mac qq音乐怎么下载mp3格式的音乐)

    Mac qq音乐怎么下载歌曲(mac qq音乐怎么下载mp3格式的音乐)

  • 小规模纳税人附加税是几个点
  • 以现金支付
  • 个人所得税定额扣除怎样理解
  • 个体户超过定额怎么纳税申报
  • 印花税申报了什么时候扣款
  • 税务发票上的二维码
  • 交房前是否需要给房产局交房租维修费
  • 企业所得税广告费结转先扣哪一年
  • 商贸企业增值税优惠政策
  • 利税总额计算公式表
  • 支付宝已经支付的钱怎么退回来
  • 专项应付款转资本公积
  • 公司出差员工有权拒绝吗
  • 被辞退还有退休金吗
  • 股权0元转让
  • 当月没有认证的发票要勾选吗
  • 外管证交税需要带什么材料
  • 固定资产金额小于5000元,可以不一次性税前扣除吗
  • 普通发票需要什么
  • 往年度的工资做什么科目
  • 收入可以用收据入账吗
  • 建筑施工单位可以安装电表吗
  • 支付知识产权服务费账务处理
  • 新版edge浏览器兼容性视图怎么设置
  • win7电脑加入域
  • 企业福利费支出范围
  • 并购动因理论有什么
  • 在win7系统中,添加打印机驱动程序
  • 在win10中显示我的电脑
  • 债务重组是什么工作
  • php批量修改
  • windows7如何制表
  • php traits
  • 金融业营业税税率
  • element ui el-tree
  • 医院会计制度与实务
  • php json 对象
  • 什么是成本会计
  • 会计期初余额和期末余额计算公式
  • [ChatGPT] 从 GPT-3.5 到 GPT-5 的进化之路 | ChatGPT和程序员 : 协作 or 取代
  • python填写表格
  • 什么情况下要开外经证
  • 分公司开票总公司付款可以吗
  • 质量赔偿金 计入什么科目
  • sql server字符连接
  • 以前年度差旅费退回
  • 付款后退货
  • 外部审计的构成
  • 公关费用计入什么科目比较好
  • 避税唯一安全的方法
  • 交易性金融资产属于流动资产
  • 开票加的税点走什么费用
  • 低值易耗品与固废的区别
  • 企业建帐的基本要求
  • 哪些账簿可以跨市登记
  • 大型商业企业
  • 连接mysql数据出错1045
  • win8怎么没有我的电脑
  • WIN7中的一个库最多可以包含多少个文件夹
  • Windows server 2003 密码忘了
  • mac book丢失
  • linux常用命令chmod
  • windows7屏幕颠倒
  • jquery width
  • html中dt
  • mono为什么不能用了
  • domReady的实现案例
  • python发送mq消息
  • 快速使用流量
  • java一些常用词汇
  • shell的使用
  • java编程基础知识入门
  • 正则化实现
  • jquery中获取元素的三种方法
  • ca证书怎么下载安装
  • 企业未代扣代缴个税能退税吗
  • 国税网上办税大厅在哪
  • 国税局调地方
  • 留抵税额退税政策2022
  • 环保税2018年开征文件
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设