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

  • 小米手机双时钟怎么显示在屏幕(小米手机双时钟插件)

    小米手机双时钟怎么显示在屏幕(小米手机双时钟插件)

  • 真我gt2pro屏幕是e5还是e4

    真我gt2pro屏幕是e5还是e4

  • 电脑出现recovery蓝屏界面怎么办(电脑出现recovery蓝屏界面怎么办win10)

    电脑出现recovery蓝屏界面怎么办(电脑出现recovery蓝屏界面怎么办win10)

  • 淘宝直播不退不换规则(淘宝直播不退不换规则没发货可以退款吗)

    淘宝直播不退不换规则(淘宝直播不退不换规则没发货可以退款吗)

  • 快手退出登录别人还能看到我吗(快手退出登录别人还能给我发私信吗)

    快手退出登录别人还能看到我吗(快手退出登录别人还能给我发私信吗)

  • 钉钉退出群聊会提示吗(钉钉退出群聊会显示吗)

    钉钉退出群聊会提示吗(钉钉退出群聊会显示吗)

  • 删除拉黑后显示什么(拉黑和删除微信显示)

    删除拉黑后显示什么(拉黑和删除微信显示)

  • 六类屏蔽网线和非屏蔽的区别(六类屏蔽网线和非屏蔽的样子)

    六类屏蔽网线和非屏蔽的区别(六类屏蔽网线和非屏蔽的样子)

  • e站怎么设置只看中文(e站怎么设置只看中文本)

    e站怎么设置只看中文(e站怎么设置只看中文本)

  • qq怎么查以前的聊天记录(qq怎么查以前的网名)

    qq怎么查以前的聊天记录(qq怎么查以前的网名)

  • 淘气值怎么显示不出来(淘宝淘气值在哪)

    淘气值怎么显示不出来(淘宝淘气值在哪)

  • 刚买的笔记本电脑怎么下软件(刚买的笔记本电脑充电要注意什么)

    刚买的笔记本电脑怎么下软件(刚买的笔记本电脑充电要注意什么)

  • ios13验证更新一直失败(ios13更新一直正在验证)

    ios13验证更新一直失败(ios13更新一直正在验证)

  • 苹果手机喜马拉雅下载的音频在哪里(苹果手机喜马拉雅音频怎么导出mp3)

    苹果手机喜马拉雅下载的音频在哪里(苹果手机喜马拉雅音频怎么导出mp3)

  • 荣耀20耳机怎么设置(荣耀耳机怎么配对)

    荣耀20耳机怎么设置(荣耀耳机怎么配对)

  • 华为mate30还是京东方屏幕吗(华为mate 30和)

    华为mate30还是京东方屏幕吗(华为mate 30和)

  • 手机内屏进水了怎么办(手机内屏进水了可以充电吗)

    手机内屏进水了怎么办(手机内屏进水了可以充电吗)

  • ipad怎么同步相册(ipad怎样同步iphone照片)

    ipad怎么同步相册(ipad怎样同步iphone照片)

  • wps长横线 怎么打(wps长横线怎么)

    wps长横线 怎么打(wps长横线怎么)

  • 苹果xr怎么样使用双卡(苹果xr怎样设置)

    苹果xr怎么样使用双卡(苹果xr怎样设置)

  • 就诊卡怎么在微信充值(就诊卡怎么绑定公众号)

    就诊卡怎么在微信充值(就诊卡怎么绑定公众号)

  • 银行收款码怎么开通(银行收款码怎么申请免费的)

    银行收款码怎么开通(银行收款码怎么申请免费的)

  • 借充电宝可以异地还么(借充电宝能不能跨省)

    借充电宝可以异地还么(借充电宝能不能跨省)

  • 苹果手机需要下载手机管家吗(苹果手机需要下载输入法吗)

    苹果手机需要下载手机管家吗(苹果手机需要下载输入法吗)

  • vue项目遇见事件冒泡如何处理(vue事件bus)

    vue项目遇见事件冒泡如何处理(vue事件bus)

  • 超过小规模纳税人
  • 经营所得和企业所得
  • 化粪池合同书
  • 个体户个人经营所得税税率表2023
  • 结转本月发生的费用
  • 工会账户谁来管理
  • 最近的火车票代售点
  • 小规模季度申报怎么申报
  • 小规模企业收到专票可以入账吗
  • 怎么确定印花税申报成功
  • 1元转让股权账务实
  • 社保利息是什么意思
  • 净值的公式
  • 箱包类增值税发票多少点
  • 苗木增值税发票税率
  • 化妆品消费税是从价还是从量
  • 纳税人跨县(市、区)提供建筑服务
  • 营业外收入不纳税?
  • 坏账准备年底有余额吗
  • 广告公司确认收入怎么写
  • 个体户没有进项票怎么开销项发票
  • mac菜单栏设置在哪里
  • 公司利润为负数 贷款
  • 解决网卡驱动故障的方法
  • win10我无法更改某些设置
  • 操作系统的安全目标主要包括哪些?
  • 制造费用结转到生产成本
  • 子公司接受母公司捐赠的会计处理
  • 公司已开工程发票怎么开
  • CoverDesigner.exe是一个安全进程吗 CoverDesigner进程查询
  • 苹果官网
  • html可以描述什么
  • vue的后端
  • 小程序制作平台
  • ts类型声明 要为某个文件里的变量声明吗
  • 贴现资产卖断会怎么样
  • 公司向银行贷款利息是多少
  • 运输发票必须附票吗
  • 上年度会计凭证怎么填写
  • 什么是一般增值税纳税人
  • db2 21000怎么解决
  • 递延收益分摊是当月还是次月
  • 公司缴纳残保金的标准
  • 现金流量表编制原则
  • 利润表的税金及附加怎么得出来
  • 销售退货和销售换货的区别
  • 收客户货款怎么说话
  • 公司在银行的贷款会计分录
  • 暂估出库需要确认收入吗
  • 税务局指定购买发票流程
  • 预付押金是否可以退回
  • 固定资产清理账户借方
  • 供货商做产品配送怎么做
  • mysql保存命令
  • sqlserver 查看表
  • fedora31安装教程
  • win7与ubuntu双系统
  • win7旗舰版系统恢复
  • 类似wps office的手机软件
  • win10系统浏览器在哪
  • mac修改用户名称
  • desl.exe是什么
  • linux ll不能用
  • win8 u盘启动
  • 如何将文件夹建立成快捷方式
  • windows8启动项设置
  • perl怎么读取文件
  • dos 判断
  • 电脑启动项清理
  • linux find -cmin
  • Unity3D之Transform参数
  • unity collider类属性方法
  • jquery动态效果
  • python基础教程视频教程
  • js原生dialog
  • JavaScript中的数据类型
  • 禁止所有陌生人的来电设置
  • 如何认真贯彻落实中央八项规定,切实改进工作作风
  • 实名办税的法律依据
  • 红股派息是赠送股票的意思吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设