jsp/servlet取参数乱码问题分析

JSP+Servlet学习经验1:解决form表单提交后相应页面中文乱码的问题 初学JSP与Servlet的同学估计经常会遇到类似问题,有时输入的中文响应输出为问号(???),有时输出乱码,今天查了一些资料算是理清了问题的原因。 1.问题根源 问题的根源在于form表单提交数据时的传输数据的默认编码为"ISO-8859-1",这种编码不能够解析中文,因此会出现乱码的情况。 2.解决措施 明白了问题的根源后,可以通过以下两种方式解决: (1).对request输入数据 阅读详情
1、问题的来源和根本原因:
这个话题是个很古老的话题,从jsp/servlet一出现就有了,对经常和汉字打交道的朋友来说,遇到最多的就是表单页面提交的中文参数 在服务器端直接用
String myparam=request.getParameter("myparam");
这里myparam的值将会是乱码。于是,有了这个解决方案:
String myparam=new String(request.getParameter("myparam").getBytes("ISO-8859-1"),"GBK");

那么这个问题的本质是什么呢?大家如果看过servlet的规范,或者研究过tomcat的源码,就会发现问题的原因:实际上在 servlet引擎实现 request.getParameter("myparam")时,会先在一个缓存里找一下,如果没有,就会开始解析参数并把解析后的参数和其对应的值放入缓存中。而在解析参数时,servlet规范中规定:首先按照 request.getCharacterEncoding获取的编码对解析出来的byte进行编码,创建新的字符串。如果request.getCharacterEncoding 的值是null,则按照ISO-8859-1来进行编码。而现在大多的浏览器在发送数据时都没有发送客户端的数据编码。所以在没有预先设置过的情况下,引擎应该都是按着ISO-8859-1来处理参数的值。

假如表单的参数实际值是“中国” 那么按着GBK的编码提交到服务器端的myparam的值对应的应是4个byte。
假设 解析出来的byte 是paramBytes,
那么引擎为我们放入参数缓存中的参数值就是这样的 new String(paramBytes,encoding);
很明显本来2个字节参能表达一个汉字 ISO-8859-1来编码之后,每个字节都成了单独的一个字符:4个字节成了四个字符,这就是我们看到的乱码出现的原因。

所以 new String(request.getParameter("myparam").getBytes("ISO-8859-1"),"GBK"); 实际上在进行还原操作。

需要注意的是按GBK进行编码还原的前提是你表单页面的表单数据是按GBK进行编码的。这个主要是通过
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
来保证的。当然如果你的页面是jsp,并且在jsp页面头上设置了
<%@ page contentType="text/html;charset=GBK" language="java" %>
那么在浏览器里打开这个页面时浏览器会自动设置页面编码为GBK

2、说说UTF-8

虽然我们主要处理汉字,但是也有遇到其他诸如日语,阿拉伯语,俄语等的情况。那么用GBK进行字符处理肯定是不行的。所以现在比较流行的就是用UTF-8来进行。那么为什么UTF-8就可以解决国际化的问题呢?
这个问题简单解释就是 大多语言的字符都可以在UTF-8的字符表中找到对应的位置。比如如果我们用GBK来处理俄语之所以不行就是因为俄语的某些字符在GBK的编码表里没有对应的,所以也就无所适从。 由于我对编码理论不是很熟悉,所以不能深入去解释。

基于UTF-8的解决方案的做法就是页面和字符的处理全部采用UTF-8,而唯一比较麻烦的就是页面的汉字或者放在资源文件中,或者在页面上,当然都得先进行相应的编码转换,这里就不再说了。

3、更方便的解决方案

第一种:
request.setCharacterEncoding("GBK"); 
String htmlContent=request.getParameter("content");
即在获取参数之前,主动设置CharacterEncoding,这就使得在解析参数时,会按着给定的编码进行。

第二种:
filter,这个现在用的比较多
但是其背后理论和第一种是一样的,只是换了一种实现方式而已

IWR6843ISK+DCA1000EVM 本人遇到的所有报错和解决方案 本文详解了初次使用DCA1000EVM和mmave studio遇到的一系列的问题以及解决方法 阅读详情

相关推荐

arcgis密度分析

密度分析 密度分析是指根据输入的要素数据集计算整个区域的数据集状况,从而产生一个连续的密度表面。通过计算密度,将每个采样点的值散布到整个研究区域,并获得输出栅格中每个像元的密度值。在 ArcGIS 中,分布密度的计算方法有点密度分析、线密度分析和核密度分析三种。 1.点密度分析 导入实验数据居民点图层和道路图层 在自定义里勾选空间分析模块Spatial Analyst 点击空间分析工具中密度分析内的点密度分析, 参数设置如下,其中输出像元大小表示输出栅格数据集的像元大小。值越小.

Jasenjane的博客 2万+

jsp/servlet取参数乱码问题再分析

 1、问题的来源和根本原因:这个话题是个很古老的话题,从jsp/servlet一出现就有了,对经常和汉字打交道的朋友来说,遇到最多的就是表单页面提交的中文参数 在服务器端直接用String myparam=request.getParameter("myparam");这里myparam的值将会是乱码。于是,有了这个解决方案:String myparam=new String(request.ge

javaguru 867

偏差平方和说明什么_共同方法偏差检验之潜在误差变量控制法的Amos操作

潜在误差变量控制法是在结构方程模型中,将共同方法偏差作为一个潜变量加入模型,如果在包含方法偏差潜变量情况下模型的显著拟合度优于不包含共同方法偏差潜变量的情况,那么共同方法偏差效应就得到了检验,包含共同方法偏差潜在变量的模型,对于预测与效标变量关系的估计则控制了共同方法偏差。具体操作如下:因为这个过程也是基于因子分析的基础上进行的,关于绘制模型以及运行等过程不再介绍,请参考前面关于“合成信度 ”的相...

weixin_28730927的博客 2365

调用req.getParameter方法出现中文乱码(全是问号???)

在java开发中,如果编码配置不统一,很容易出现中文乱码的情况,这里就记录下自己遇到的调用req.getParameter方法出现中文乱码,并解决这一情况的方法 注意修改以下几个地方 1.jsp页面中的编码 2.连接数据库时配置的编码 jdbc:mysql://localhost:3306/goods?useUnicode=true&characterEncoding=UTF-83.ser

TH226的专栏 3676

Linux下Linpack测试GPU和CPU性能

前面的文章已经介绍了如何搭建Linpack环境:https://blog.youkuaiyun.com/liu_feng_zi_/article/details/107429720 接下来说明如何使用 一、编写运行脚本: 新建文件:run_linpack.sh,内容如下: export HPL_DIR =/root/LHC/Linpack/hpl-2.0_FERMI_v15 export MKL_NUM_THREADS=6 export OMP_NUM_THREADS=6 export MKL_DYNAMI.

liu_feng_zi_的专栏 4634

Mac安装Weblogic教程

1.Weblogic的下载 这次安装的是最新版本12 官网下载地址: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html 下载需要登录账号,如没有账号要注册一个 下载后的文件如下图,其中fmw_12.2.1.3.0_wls_quick.jar文件就是安装包了,注意现在不要对它进行解压 2.安装前的确...

weixin_40102675的博客 5063

【servlet学习之】乱码问题

解决servlet/jsp中乱码问题: 1.  request.setCharacterEncoding("utf-8") 这种方式解决的是消息体中的中文编解码问题; post方式参数存放在请求数据包的消息体中。 故如果表单以post方式提交到服务器端,表单中包含中文,通过这种方式来解决乱码问题; 这句话应该位于request.getParameter("参数名")之前。

温故而知新 615

Auto.js实现视频号点赞自动化

摘要:本文介绍了一个微信视频号自动化点赞的实现方案。通过定位点赞图标和数量容器,点击点赞按钮后检测点赞数变化,若发现取消点赞则自动补点。核心代码包括:1)获取点赞容器和图标;2)记录点赞前后数量;3)判断是否误取消并补点;4)循环执行点赞和滑动页面操作。该方案解决了滑动页面可能导致误取消点赞的问题,实现了自动化批量点赞功能。文章强调仅供学习参考,提醒勿滥用该技术。

分享前端工程化、AI 应用、Agent 开发与大模型实践! 2575

关于jsp页面传入servlet的值为乱码的问题

关于jsp页面传入servlet的值为乱码的问题 以下是我尝试的方法: 1.jsp页面设置 头部: <%@ page language="javcontentType="textml; charset=utf-8" pageEncoding="utf-8"%> 表单: <form action="${ctx }/sys/user.action" method="post"...

weixin_42523438的博客 298

基于Pascal VOC数据集的YOLOv8目标检测系统实现:人、鸟、猫、牛、电视、车等20类目标识别与UI界面部署全流程详解

VOC 2007、VOC 2012 两个主要版本;每个图像提供 bounding box(目标框)+ 目标类别;共计 20 类,所有图像手工标注,质量高。完整复现 Pascal VOC 20类检测任务成功训练 YOLOv8 模型实现可视化 UI + 实时检测系统支持多平台部署和演示。

YOLO 771

Windows11安装配置openclaw+deepseek(大龙虾)

密码可以随便设置(注意wsl系统本质上是linux系统,设置密码系统是不会像windows一样显示*点位符的),输入密码后敲回车再次输入密码,输入后敲回车。如果不小心关闭这个界面,可以再次进入powershell,输入wsl进行系统。在powershell中输入:curl -fssL https://openclaw.ai/install.sh | bash。下面是否通过第3方平台和openclaw交互,我选择j最后一项:skip for now。到下面这一步,可以通过键盘的左箭头选择Yes.

mahailiang的专栏 344

jsp向servlet发出请求,响应时,出现的乱码问题解决方法

我们在使用jsp 向servlet发出请求 ,接收数据时 ,出现乱码问题 下面是我的解决方法

JssenJ的博客 737

【同等学力】2004-数学⭐✨

1.有些人勤奋,但并非所有人都勤奋。2.不管白猫黑猫,抓住老鼠就是好猫

super_mochi1 511

[转]jsp/servlet取参数乱码问题分析

问题的来源和根本原因:    这个话题是个很古老的话题,从jsp/servlet一出现就有了,对经常和汉字打交道的朋友来说,遇到最多的就是表单页面提交的中文参数 在服务器端直接用String myparam=request.getParameter("myparam");这里myparam的值将会是乱码。于是,有了这个解决方案:String myparam=new String(request.g...

iteye_11484的博客 82

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

关于Servlet,JSP,HTML中文乱码的问题

首先说明一点,以下的测试方法只有一个HttpServletRequest.forward,但是基于原理上的讲解,其他乱码问题应该也可以从中得到一些启示。不敢保证百分百正确,但能提供一个大致的方向。 下面为测试入口servlet的代码,其中的getWriter被注释掉,后面讲其作用。 protected void doGet(HttpServletRequest req, HttpSe...

qq_27368993的博客 1341

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jsp servlet 中文乱码问题

我们在使用servlet的时候经常会遇到一个头疼的问题,那就是中文乱码问题,总结了一下常见的乱码场景以及解决方式. 先直接上干货吧. JSP和Servlet的中文乱码处理 总结: jsp   (get请求)  →  servlet       出现场合:表单get 提交  超链接(get)    String  stuname = request.getParameter("

听风暖的博客 1556

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jsp、servlet中文乱码终极解决方法

jsp中文乱码终极解决方法 一 找出问题的根源    乱码可能出现的地方:1 jsp页面中                         2 jsp页面之间相互传参的参数                        3 与数据库中数据的存取    基本归纳为以上

曹胜欢 3万+

html输入表单jsp返回数据中文乱码,JSP/Servlet页面中文显示为乱码的解决方式

经过网上搜索和自己的经验,JSP/Servlet页面的中文显示为乱码的问题可以细分为5类:1. JSP页面显示乱码。2. Servlet接收Form/Request传递的参数时显示为乱码3. JSP接收Form/Request传递的参数时显示为乱码4. 用时页面显示乱码5. 数据库存取的时候产生乱码。解决方式:1. JSP页面显示乱码的解决方式:第一种方式为在页面的开头加上:注:有时候如果不再页面...

weixin_34618077的博客 1012

JSP/ Servlet常见的中文乱码原因

在开发中,我们常常遇到中文乱码的问题,比如: &浏览器中看到的 Jsp/Servlet 页面中的汉字成了 ’?’ ?     &浏览器中看到的 Servlet 页面中的汉字都成了乱码     &sp/Servlet 页面无法显示 GBK 汉字。 &Jsp/Servlet 不能接收 form 提交的汉字。 &JSP/Servlet 数据库读写无法获得正确的内容。 隐藏在

u014419512的专栏 1840

JSP/Servlet页面中文显示为乱码的解决方式

经过网上搜索和自己的经验,JSP/Servlet页面的中文显示为乱码的问题可以细分为5类:1. JSP页面显示乱码。2. Servlet接收Form/Request传递的参数时显示为乱码3. JSP接收Form/Request传递的参数时显示为乱码4. 用时页面显示乱码5. 数据库存取的时候产生乱码。解决方式:1. JSP页面显示乱码的解决方式:第一种方式为在页面的

LegnaFlow的专栏 2343

JSP以及Servlet中文乱码问题

JSP以及Servlet中文乱码问题 关于在 JavaWeb 中经常会出现乱码的状况,下面总结一下会出现乱码的情况: 一、JSP乱码 这种是最常见的,设置编码的位置位于 JSP 的第一行,如果在 Eclipse 中新建一个 JSP 默认 是下面这种: &lt;%@ page language=“java” contentType=“text/html; charset=ISO-8859-1” pa...

慕白博客 9045

jsp页面中文乱码问题

问题描述:JSP页面的中文乱码问题产生的原因非常之多,下面给出解决思路和解决办法。 解决思路:JSP的流程是:页面-&gt;Servlet-&gt;数据库-&gt;Servlet-&gt;页面,所以一旦出现页面乱码,我们需要一步一步的判断。 1、首先是判断从页面到Servlet后乱码是否已经出现,怎么判断?很简单,在Servlet中获取页面参数后打印输出看一下。 2、如果Servlet中取到...

高级CtrlCV工程师 1652

JSP,servlet和数据库之间传值出现乱码的问题

最近困扰我很久的一个问题终于解决了,为他我头疼了好几天,问题是JSP通过servlet向数据库传值,查询显示在页面的时候出现了乱码,原先我数据库中有两行带有中文的数据,查询的时候倒是没有出现乱码,我debug一下,发现JSP和servlet中所有接受中文字符集的变量都没有出现乱码,我去数据库查看,所有添加的中文字符都是问号,问题发现了,我就百度什么原因,有人说改变tomcat字符集,通过更

月色荒凉了天明 3998

jsp传参servlet中文乱码问题

jsp传参servlet中文乱码问题,在jsp页面输入查询条件,英文和数字查询都能正常查询出结果,但是查询中文却查不出来(数据库中数据确认没问题),jsp页面和控制台也都能正常显示中文,但是把查询条件放到sql语句中就编程了问号,项目名称和jsp页面都是用的utf-8编码,百度了好久,以下方法也都试过了还是不行, 1,设置jsp页面的编码为utf-8 <%@ page langua...

adminLQ的博客 677

关于JSP,servlet乱码问题集

做WEB项目是长遇到这个问题,,我知道过滤器能解决,,但是有时候过滤器它就是解决不了。。 一、JSP页面显示乱码 二、表单提交中文时出现乱码 三、数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到 的中文乱码的问题及解决办法写出来供大家参考。 一、JSP页面显示乱码 下面的显示页面(disp

1935
上一篇: Java开源Apache项目分类列表
下一篇: 需求分析远比编码更重要
weoln
博客等级 码龄21年 43粉丝 123原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值