java 解析中文乱码_java中文乱码分析整理

1)  pageEncoding="***"的作用是设置JSP编译成Servlet时使用的编码。

2)  contentType="text/html;charset=***"的作用是指定对服务器响应进行重新编码的编码。

3)  request.setCharacterEncoding("***")的作用是设置对客户端请求进行重新编码的编码(仅仅只适用于设置 post提交的requestbody的编码而不是设置 get方法提交的queryString 的编码。该方法告诉应用服务器应该采用什么编码解析 post传过来的内容。)。

4)  response.setCharacterEncoding("***")的作用是指定服务器响应客户端请求时进行重新编码的编码。JSP文件的运行过程如图1所示。

5f6829f2246b92b26c2a9aab194f74e6.png

当JSP引擎把JSP文件按pageEncoding所指定的编码方法编码转换为Servlet文件时,若pageEncoding没有指定,则按照contentType所指定方法编码。若二者都没有指定,则将按照JVM的默认编码方法进行编码。若这一步骤编码不支持中文,则JSP文件中的中文转化为Servlet文件时本身就是乱码。

客户端浏览器在发送和接收数据时,按照JSP文件的contentType所指定的编码方式来对URL和参数编码。服务器在接收数据时,按照request.setCharacterEncoding的设置对数据进行编码,在发送数据时,按照response.setCharacterEncoding—contentType—pageEncoding的优先顺序对要发送的数据进行URL编码。在这个过程中,如果参数中包含中文,而没有设置好编码方式,服务器在处理数据的过程中就会出现中文乱码问题。

3  JavaWeb开发中文乱码问题的解决方法

3.1  页面显示乱码

如果在访问某个JSP页面或者Servlet产生的页面时,页面上本应显示中文信息的地方,却显示为乱码,这可能是浏览器显示不正确,也可能是后台在动态生成界面的时候,其内容就是乱码。

如果是浏览器显示的问题,需要设置JSP或者Servlet的contentType属性。对于JSP中的设置使用的是page指令,设置如下:,对于Servlet生成的页面,可以在输出页面之前调用response的setContentType()方法,其代码形式如下:response.setContentType(“text/html;charset=GB2312”)另外,在生成的HTML文件的头部可以加入如下代码:以减少中文乱码的发生。

3.2  用户提交的数据是乱码

当表单中提交的中文数据出现乱码时,原因是request对浏览器提交的数据解码不正确。根据表单提交方式的不同,此类乱码问题有两种解决方法。

对于表单中POST方式提交的数据,数据是作为请求的消息体发送的,默认情况下采用ISO8859-1编码,所以要设置请求对象的字符编码,代码形式如下:

request.setCharacterEncoding("GB2312"),在响应页面上使用response.setCharacterEncoding("GB2312")设置编码方式。如果需要处理的页面过多时,单个处理就会比较麻烦,这时可以通过设置过滤器将所有的request编码都进行设置。

对于表单中GET方式提交的数据或者URL提交的数据,只在接收数据的JSP文件或Servlet文件中设置request.setCharacterEn⁃coding参数是不行的,因为在Tomcat5.0中,默认情况下使用ISO8859-1对URL提交的数据和表单中GET方式提交的数据进行编码。因此,在这种情况下,需要修改Tomcat的server.xml文件。具体方法如下:

在Tomcat的server.xml文件中,在port号为8080的Connector元素中增加一个属性:URIEncoding="GB2312"。

Java中网络传输使用的标准字符集是ISO-8859-1,所以在后台用request.getParameter("message");获取前台传过来的中文时,得到的还是ISO-8859-1字符集,中文就会出现乱码现象,好多人的解决办法是在前台传递中文之前进行decode,后台再decode一下进行转换,这样感觉很是麻烦

处理方法一:

js 程序代码:url=encodeURI(url);注意是整个URL

服务器端的代码:String linename = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");

处理方法二:

js:var url="name="+name;

url=encodeURI(encodeURI(url)); //用了2次encodeURI

window.location = "/inner/line/line.jsp?"+url;

服务器端的代码:

String linename = request.getParameter(name);

//java : 字符解码

linename = java.net.URLDecoder.decode(linename , "UTF-8");

参考案例:http://www.cnblogs.com/o-andy-o/archive/2013/03/04/2942976.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值