您的位置:首页 > Web前端 > JavaScript

JSP中文乱码处理

2009-07-08 15:04 447 查看
基于Tomcat中间件处理JSP中文时提交后出现乱码,最终问题解决方案:
鉴于网络上各种各样的解决方案,有基于环境、有基于URI等,但为避免兼容性问题,应该以运行代码自我设置来解决。
JSP代码中的 JAVA 字符编码设置
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.net.URLEncoder"%>
(好像上条语句并非必要)
红色为制定JSP处理字符采用UTF-8编码处理方式。
<%request.setCharacterEncoding ("UTF-8");%>
JSP内JAVA代码设定接收参数为UTF-8编码,在form提交,post还是get都支持中文,如果没有该设定,就只能使用get方式。
JSP 内 HTML 头的编码设置
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Note Page</title>
</head>
<body>
……
……
红色部分UTF-8制定HTML页面使用的编码方式
form 提交代码如下
<form action=index.jsp method="post"><h3>Please Input Your Name:</h3>
<input type="text" size="30" name="yourname" value="" >
<input type=submit value="提交">
</form>
接收代码如下:
<%
String temp1 = request.getParameter ("yourname");
……
%>

超链接参数传递方式略有不同,若只采用以上设定,遇中文参数,直接提交会导致部分文字获取参数,再提交前务必进行编码。
<a href="
<%=request.getContextPath()%>/index.jsp?yourname=
<%=java.net.URLEncoder.encode (Joho,"UTF-8")%>">
<%=MyName%>
</a>
由java.net.URLEncoder.encode函数将要发送的变量解析为16进制数字编码,进行URL传递,若不编码接收到的信息很可能是\ufffd或者是残缺的中文,示范接收代码如下:
<%String str = request.getParameter ("传递的参数名");%>
<p>Hello: <%=str%></p>
由此,获得参数后的str内将是正确的中文信息。
-----------以下引自楼主------------------
超链接参数传递方式略有不同,若只采用以上设定,遇中文参数,直接提交会导致部分文字获取参数,再提交前务必进行编码。
<a href="
<%=request.getContextPath()%>/index.jsp?yourname=
<%=java.net.URLEncoder.encode (Joho,"UTF-8")%>">
<%=MyName%>
</a>
------------引用完毕-----------------------
这种情况能否展开讨论一下。
当按照以上写法,抑或是页面编码已经指定utf-8,而不用再encode的情况下,server端是能够得到正常的中文的,此时浏览器地址栏中显示的应该是
index.jsp?yourname=%E4%B8%AD%E6%96 之类(参数已经被编码)
此时,如果手动修改地址栏,将地址改为index.jsp?yourname=中文测试, 再回车发送该请求,请问还能正确得到中文吗?
我的测试环境是统一UTF-8编码,包括Tomcat容器,SQLServer2k数据库,JBuilder2006,并且写了一个UTF-8的全局CharacterFilter,用于过滤所有请求。以上工作能够解决几乎所有乱码问题,但唯独上面提到的情况鞭长莫及,一定是有办法解决的,我还在尝试。
无独有偶,我在使用google时注意到,google搜索关键字也是通过encode转码,大家可以测试一下,google一个简单的中文“你好”,你看到的地址栏中可能是这样的:
http://www.google.cn/search?hl=zh-CN&newwindow=1&q=%E4%BD%A0%E5%A5%BD, 也就是 q=你好 被编码了
现在再做一个测试,将q= 后面的参数改成中文“北京”,
http://www.google.cn/search?hl=zh-CN&newwindow=1&q=北京
这时敲回车,你会发现,url被encode成了http://www.google.cn/search?hl=zh-CN&newwindow=1&q=%B1%B1%BE%A9
如果是重定向,那么一个servlet用于转码url,一个servlet进行查询即可(当然,我并不知道google平台采用的技术),现在的问题是,如果作为一个全局的过滤器,该如何处理这种情况呢?
设置完毕将完美解决JSP中文字符参数问题,MySQL也同样设置为UTF-8编码,数据库存取没问题,Tomcat服务器环境进行任何设置。
欢迎批评讨论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 休闲