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

  • 网页链接打不开有哪些解决方法(网页链接打不开)(网页链接打不开英文怎么说)

    网页链接打不开有哪些解决方法(网页链接打不开)(网页链接打不开英文怎么说)

  • 12309怎么查询案件(12309怎么查询案件进度)

    12309怎么查询案件(12309怎么查询案件进度)

  • 如何将word转换成pdf(如何将word转换成问卷调查形式)

    如何将word转换成pdf(如何将word转换成问卷调查形式)

  • 淘宝退货了还可以评价吗(淘宝退货了可以取消吗)

    淘宝退货了还可以评价吗(淘宝退货了可以取消吗)

  • 手机qq音乐怎么显示歌词(手机qq音乐怎么控制电脑的qq音乐)

    手机qq音乐怎么显示歌词(手机qq音乐怎么控制电脑的qq音乐)

  • word显示比例怎么设置(word显示比例怎么调整)

    word显示比例怎么设置(word显示比例怎么调整)

  • 华为基带是自己的吗(华为基带是什么牌子)

    华为基带是自己的吗(华为基带是什么牌子)

  • iphone se2是双卡吗(苹果是双卡)

    iphone se2是双卡吗(苹果是双卡)

  • 网易云属于腾讯吗(网易云属于腾讯免流吗)

    网易云属于腾讯吗(网易云属于腾讯免流吗)

  • 微信会自动删除好友吗(微信会自动删除信息吗)

    微信会自动删除好友吗(微信会自动删除信息吗)

  • 如何让qq赞隐藏(怎样把qq赞隐藏)

    如何让qq赞隐藏(怎样把qq赞隐藏)

  • 为什么快捷指令里找不到微信(为什么快捷指令没有声音)

    为什么快捷指令里找不到微信(为什么快捷指令没有声音)

  • 闲鱼发货自己找快递吗(闲鱼发货自己找货源)

    闲鱼发货自己找快递吗(闲鱼发货自己找货源)

  • word文档怎么纵向排版(word文档怎么纵向打字)

    word文档怎么纵向排版(word文档怎么纵向打字)

  • iphonex用的是什么接口(苹果x是用的什么芯片)

    iphonex用的是什么接口(苹果x是用的什么芯片)

  • 抖音发布的作品怎么删除(抖音发布的作品为什么看不到浏览者)

    抖音发布的作品怎么删除(抖音发布的作品为什么看不到浏览者)

  • 如果手机欠费了不交会怎样(如果手机欠费了,一直不交会怎么办)

    如果手机欠费了不交会怎样(如果手机欠费了,一直不交会怎么办)

  • 苹果手机怎么卸载软件(苹果手机怎么卸载不想用的软件)

    苹果手机怎么卸载软件(苹果手机怎么卸载不想用的软件)

  • 免打扰模式怎么设置(免打扰模式怎么设置微信提醒)

    免打扰模式怎么设置(免打扰模式怎么设置微信提醒)

  • 抖音管理员怎么踢人(抖音管理员怎么发飘屏文字)

    抖音管理员怎么踢人(抖音管理员怎么发飘屏文字)

  • 苹果拍照镜像怎么取消(苹果拍照镜像怎么办)

    苹果拍照镜像怎么取消(苹果拍照镜像怎么办)

  • qq小幸运标识(qq小幸运标识什么时候出的)

    qq小幸运标识(qq小幸运标识什么时候出的)

  • 角马群穿越在肯尼亚和坦桑尼亚之间的马拉河 (© zhengvision/Getty Images)(角马群的迁徙方向)

    角马群穿越在肯尼亚和坦桑尼亚之间的马拉河 (© zhengvision/Getty Images)(角马群的迁徙方向)

  • webpack -v报错:Cannot find module ‘webpack-cli/package.json‘(webpack devserver contentbase)

    webpack -v报错:Cannot find module ‘webpack-cli/package.json‘(webpack devserver contentbase)

  • php中__call方法怎么用(php call方法)

    php中__call方法怎么用(php call方法)

  • 个人如何办理营业执照需要什么材料
  • 高新技术认定标准条件是什么
  • 企业股东分红所得税税率表
  • 不征税收入怎么申报企业所得税
  • 经销商注册什么公司
  • 按工人工资比例结转制造费用的科目
  • 公司作为承租方需要交房产税吗
  • 增值税进项和销项税的计算方法
  • 糖类计算公式
  • 增值税扣税凭证包括增值税专用发票
  • 船舶维修价格表2017
  • 捐赠货品怎么做会计分录
  • 软件固定资产还是无形资产
  • 1697510552
  • 英雄联盟符文推荐怎么不弹出来
  • 怎样知道自己是否贫血
  • 华为mate pro翻转静音
  • 在建工程转固定资产后如何计提折旧
  • unix和linux适用于
  • 京东预付卡怎么做账
  • 纳税确有困难标准
  • 收到材料未收到会计处理
  • 在公司发明的东西专利权归谁
  • 材料成本差异贷方表示
  • PQIMountSvc.exe是什么进程 PQIMountSvc进程查询
  • 科克伯什么意思
  • 公司报销医疗费用公司医保里面的钱也报吗
  • 子公司取得投资收益
  • 离职补偿金的会计实务处理
  • 个人销售非住宅无法提供原值怎么计算增值税
  • 专利年费的滞纳金
  • 前端项目部署到nginx
  • phpcgi远程代码执行漏洞
  • thinkphp django
  • 常见浏览器兼容软件
  • js如何转换为数值型
  • 前端面试常问的项目问题
  • js相关知识
  • 销售费用处理不包括哪些
  • 员工业余自学
  • 企业从政府部门辞职流程
  • 企业发生销售退回时,不论销售退回的商品
  • db2bigint
  • mysql常用命令汇总
  • mongodb aggregate 性能
  • 公司签发银行承兑汇票的行为属于什么行为
  • 个人转帐多少不引起注意
  • 什么企业符合高新技术企业
  • 承兑汇票可以当现金用吗
  • 固定资产会计上与税法上提折旧时间
  • 什么情况下增值税进项税额转出
  • 房产互换如何交税费
  • 出口货物的进项税
  • 成品油发票的六个问答
  • 空调维修保养方案
  • 贸易公司平价销售怎么样
  • 合作建房土地增值税清算案例
  • 小规模纳税人减按1%账务处理
  • 科技项目扶持资金
  • 变更法人流程和资料
  • 外购货物分配给股东
  • 发票对方没有上传,无法勾选发票要怎么办
  • 无形资产摊销年限最新规定
  • 财务会计的基本概念
  • 会计政策变更的追溯调整法和未来适用法
  • sqlserver2019的使用
  • win7开机黑屏只有鼠标安全模式也不行
  • 电脑及网络维护
  • ngwatch.exe
  • mtask.exe - mtask是什么进程 有什么用
  • manager是啥
  • python 爬虫例子
  • nodejs实例教程
  • java script js
  • jquery 选择
  • python字符类型有哪些
  • 国家税务总局通知公告
  • 百旺税控盘电话服务热线
  • 河南省纪检委网站
  • 从哪个国家进口牛肉
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设