欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  Java

jsp如何处理中文乱码

程序员文章站 2022-05-07 14:20:37
...
绝大多数的开发平台包括java,c语言,python(甚至更多)在进行代码开发的过程中,几乎都要用到中文。而计算机在处理这些东西的时候,它并不能识别出你写的东西是什么,他会将这些数据进行编码处理,转换成计算机能进行识别并执行的语言。编译过后的代码如果没有进行反编译的话,给我们看到的就是一堆让人看不懂的乱码。

首先,我们需要搞清楚为什么会出乱码?

服务器是在接收和发送数据时,是如何对数据进行编码的?
1.服务器发送数据
对于发送数据,服务器按照response.setCharacterEncoding—contentType—pageEncoding的优先顺序,对要发送的数据进行编码。
2.服务器接收数据
对于接收数据,要分三种情况。一种是浏览器直接用URL提交的数据,另外两种是用表单的GET和POST方式提交的数据。
因为各种WEB服务器对这三种方式的处理也不相同,所以我们以Tomcat5.0为例。
①对于表单中POST方式提交的数据
只要在JSP页面上设置了response.setCharacterEncoding或contentType或pageEncoding为"utf-8",在接受数据的JSP/SERVLET中都不会出现中文乱码问题。
②对于URL提交的数据和表单中GET方式提交的数据
在接收数据的JSP/SERVLET中仅仅设置request.setCharacterEncoding参数是不行的
因为在Tomcat5.0中,默认情况下使用ISO-8859-1对URL提交的数据和表单中GET方式提交的数据进行重新编码(解码),要解决该问题:
应该在Tomcat的配置文件server.xml的Connector标签中设置useBodyEncodingForURI或者 URIEncoding属性,其中URIEncoding参数指定对所有GET方式请求(包括URL提交的数据和表单中GET方式提交的数据)进行统一的重新编码(解码)的编码。
其中useBodyEncodingForURI参数表示是否用request.setCharacterEncoding 参数对URL提交的数据和表单中GET方式提交的数据进行重新编码,在默认情况下,该参数为false;
URIEncoding和useBodyEncodingForURI区别是,URIEncoding是对所有GET方式的请求的数据进行统一的重新编码(解码),而useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码。所以对于URL提交的数据和表单中GET方式提交的数据,可以修改 URIEncoding参数为浏览器编码或者修改useBodyEncodingForURI为true,并且在获得数据的JSP页面中 request.setCharacterEncoding参数设置成浏览器编码。

在提交JSP时对于乱码问题,首先我们要搞清楚为什么会出现乱码?

看JSP的头文件:<%@ page contentType="text/html;charset=UTF-8" language="java"%>

在这个头文件中,还有一个与编码的相关的属性:pageEncoding

首先,说说JSP/Servlet中的几个编码的作用。

在JSP/Servlet中主要有以下几个地方可以设置编码,pageEncoding="UTF-8"、contentType="text/html;charset=UTF-8"、request.setCharacterEncoding("UTF-8")和 response.setCharacterEncoding("UTF-8"),其中前两个只能用于JSP中,而后两个可以用于JSP和Servlet 中。
request.setCharacterEncoding("UTF-8")的作用是在服务器端设置客户端请求进行重新编码的编码。
该方法用来指定对浏览器发送来的数据进行重新编码(或者称为解码)时,使用的编码。
response.setCharacterEncoding("UTF-8")的作用是指定在客户端对服务器响应进行重新编码的编码。
服务器在将数据发送到浏览器前,对数据进行重新编码时,使用的就是该编码。

下面总结下,以Tomcat7.0为WEB服务器时,如何防止中文乱码。
1、对于同一个应用,最好统一编码,推荐为UTF-8,当然GBK也可以。
2、正确设置JSP的pageEncoding="UTF-8"
3、在所有的JSP/Servlet中设置contentType="text/html;charset=UTF-8"或response.setCharacterEncoding("UTF-8"),从而间接实现对浏览器编码的设置。
4、对于非表单提交的get或url请求,可以修改Tomcat的默认配置,推荐将useBodyEncodingForURI参数设置为true,也可以将URIEncoding参数设置为 UTF-8(有可能影响其他应用,所以不推荐)。或者用下面的方法,在接收数据时处理:
request.getParameter("userID"),得到userID的值
request.getParameter("userID").trim()将这个值去掉两边的空格
request.getParameter("userID").trim().getBytes("ISO-8859-1"))将这个String用ISO-8859-1编码成一个字节数祖
new String(request.getParameter("userID").trim().getBytes("ISO-8859-1"),"utf-8")将刚才的字节数祖传进string的构造函数按照"utf-8"编码创建一个string对象。
5.使用URLEncoder的方法
传参前用:
//使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式
String username_encoder = URLEncoder.encode(username,"UTF-8");
接参数后显示用:
//使用指定的编码机制对 application/x-www-form-urlencoded 字符串解码
String username_decoder = URLDecoder.decode(request.getParameter("username"),"UTF-8");

以上就是jsp如何处理中文乱码的详细内容,更多请关注其它相关文章!

相关标签: jsp 乱码