jsp超参数传递中文乱码400问题,以及解决中文乱码的全面总结。

时间:2021-07-09 22:01:19

NewFile.jsp的我的代码:

<%
String haha="关于";
%>
<a href="NewFile1.jsp?name=<%=haha %>">添加用户</a>  

NewFile1.jsp:

<%=request.getParameter("name") %>

在eclipse内置浏览器上运行NewFile.jsp:

jsp超参数传递中文乱码400问题,以及解决中文乱码的全面总结。

瞎咕咚了半天,结果发现这不是我代码的问题。

我将我的URL放在别的浏览器上试了试,发现根本不会报错,很忧伤....亏我一直在改代码,结果不是我的锅。

jsp超参数传递中文乱码400问题,以及解决中文乱码的全面总结。

jsp超参数传递中文乱码400问题,以及解决中文乱码的全面总结。

so,怎么解决呢↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓


总结一番我自己的理解。

在jsp中会出现两种编码错误。一种是页面编码错误,一种是数据编码错误。

页面编码错误:

最典型的是jsp文件中的 pageEncoding和charset:设置的都是该页面的编码!并不是传递数据的编码!

(注:这里说的传递数据不是任何参数,指的是用来通过request\response\超链接\forward等传到各种页面的数据)

 pageEncoding和charset的区别在于:

前者是告诉编译器要根据什么编码方式解码,后者是告诉浏览器你要用什么编码去显示界面。

例如很简单的demo.jsp,在这里将pageEncoding,charset都设置成UTF-8:

<body>哈哈哈
</body>

请求运行demo.jsp,首先因为我们的pageEncoding=UTF-8,所以编译器知道要用这个编码方式去解码(翻译我们写的东西),然后由于charset=utf-8,所以我们看到的界面是中文不乱码。显示“哈哈哈”。

数据传递中的编码错误:

request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码;
response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码;

传递数据,一般都是通过request\response。

   1、request带参数传递(接收数据)

例如超参数:

<a href="NewFile1.jsp?name=<%=haha %>">添加用户</a>  

例如forward动作元素:

<jsp:forward page='welcom.jsp'>  
        <jsp:param value="<%=username %>" name="cuser"/>          
</jsp:forward> 

还有最常见的表单:

<form action="LoginServlet" method="post">
用户名:<input name="username"><br>
密码:<input name="passward"><br>
<input type="submit" value="登录">
</form>

解决request参数传递乱码问题,首先要分清楚这个request是以什么方式发出的?get?post?还是其它?

如果是post发出的,在被接受文件中加入:

request.setCharacterEncoding("utf-8");	

即可,注意!该代码只适合处理post方式出现的乱码!有很多百度知道的回答、博客都没分这个!误人子弟...

如果是get就比较麻烦,例如超参数传递就是get方式传递的。由于每个人使用的tomcat版本不一样,同样的代码有的人运行就不报错,解决方式就是网上说烂的修改各种配置文件:get方式处理乱码的方法


2、response带参数传递(发送数据)

例如响应跳转:

response.setHeader("refresh","3;url=welcom.jsp?user="+username);	

还有重定向:(最好不要用重定向传参,由于其会触发两次request,可能你需要的值的request不是你希望的那个)

response.sendRedirect("NewFile1.jsp?name=zho文"); 

无论是哪个,都会出现:

jsp超参数传递中文乱码400问题,以及解决中文乱码的全面总结。

可以看到,这个可以直接通过地址栏去修改数据的,即相当于url的请求方式(get方式)。

jsp超参数传递中文乱码400问题,以及解决中文乱码的全面总结。

一般response很少会出现编码错误的。所以,只要解决了被接受页面的request的get方式接受数据的编码错误,就可以了。

一般response出现编码错误,往往是我们的浏览器编码和我们的服务器不匹配造成的。这时候我们才需要更改我们的response的编码去匹配浏览器。(大部分时候不需要这么做)

response.setCharacterEncoding("utf-8”);



参考:request、response乱码jsp流程的编码、转码