资源说明:转码: 代码如下:a.href=”./showCont.jsp?tcontent=”+encodeURI(encodeURI(tcontent));
解码: 代码如下:java.net.URLDecoder.decode((String)request.getParameter(“tcontent”), “UTF-8”);
例a.jsp源代码
代码如下:<%@ page contentType=”text/html; charset=gb2312″ language=”java” import=”java.sql.*” errorPage=”” %> <!DOCTYPE html PUBLI
在开发Web应用时,我们经常需要在不同的JSP页面之间传递参数,特别是在处理中文字符时,需要特别注意编码问题,以防止乱码的出现。本文将详细解释如何在JSP页面间正确地传递中文参数,并给出相关的编码和解码示例。
中文字符在传输过程中需要进行编码,因为URL本身只支持ASCII字符集,不直接支持Unicode(包括中文)。在JSP中,我们通常使用`java.net.URLEncoder.encode()`和`java.net.URLDecoder.decode()`方法来实现编码和解码。
在示例的`a.jsp`页面中,我们看到一个表单提交到`b.jsp`,表单的参数`test`通过`URLEncoder.encode()`进行编码,确保中文字符可以安全地作为URL的一部分:
```jsp
<%
String str_test = "华工";
%>
```
这里,`URLEncoder.encode(str_test)`将字符串`str_test`按照默认的字符集(通常是服务器的默认编码,例如GBK或UTF-8)进行编码。对于中文字符,如果服务器默认编码不是UTF-8,可能会导致乱码。
当`b.jsp`接收到请求参数后,需要将其解码回原始的中文字符串。在`b.jsp`中,我们先获取到编码后的参数值,然后使用`getBytes("ISO8859_1")`将其转换为字节数组,再用`new String()`创建一个新的字符串,指定字符集为服务器默认编码:
```jsp
<%
String str = new String(request.getParameter("test").getBytes("ISO8859_1"));
%>
<%=str %> ``` 需要注意的是,这里的`getBytes("ISO8859_1")`是将编码后的字符串转换为字节数组,`ISO8859_1`是一个较老的、只包含ASCII字符的字符集,这样转换的原因是`URLEncoder.encode()`编码后的结果遵循了`ISO8859_1`编码规则。之后,使用`new String()`将字节数组恢复成字符串时,需要指定正确的字符集(通常与服务器配置的字符集一致)。 为了确保中文字符在页面间的正确传递,通常建议在整个应用中统一使用UTF-8编码,这可以通过在JSP页面头部声明`contentType`属性来实现: ```jsp <%@ page contentType="text/html; charset=UTF-8" language="java" ... %> ``` 同时,在HTML的``标签中也要设置`charset`为UTF-8: ```html ``` 这样,无论是页面内容还是请求参数,都将使用UTF-8编码,减少了乱码问题的发生。 总结一下,JSP页面间传递中文参数的关键在于正确编码和解码。使用`URLEncoder.encode()`进行URL编码,`URLDecoder.decode()`进行解码,同时确保整个应用的编码一致性,特别是在服务器配置、JSP页面以及HTML页面中都应使用相同的字符集,如UTF-8。这样做可以有效地避免在传递中文参数时遇到的乱码问题。
<%=str %> ``` 需要注意的是,这里的`getBytes("ISO8859_1")`是将编码后的字符串转换为字节数组,`ISO8859_1`是一个较老的、只包含ASCII字符的字符集,这样转换的原因是`URLEncoder.encode()`编码后的结果遵循了`ISO8859_1`编码规则。之后,使用`new String()`将字节数组恢复成字符串时,需要指定正确的字符集(通常与服务器配置的字符集一致)。 为了确保中文字符在页面间的正确传递,通常建议在整个应用中统一使用UTF-8编码,这可以通过在JSP页面头部声明`contentType`属性来实现: ```jsp <%@ page contentType="text/html; charset=UTF-8" language="java" ... %> ``` 同时,在HTML的``标签中也要设置`charset`为UTF-8: ```html ``` 这样,无论是页面内容还是请求参数,都将使用UTF-8编码,减少了乱码问题的发生。 总结一下,JSP页面间传递中文参数的关键在于正确编码和解码。使用`URLEncoder.encode()`进行URL编码,`URLDecoder.decode()`进行解码,同时确保整个应用的编码一致性,特别是在服务器配置、JSP页面以及HTML页面中都应使用相同的字符集,如UTF-8。这样做可以有效地避免在传递中文参数时遇到的乱码问题。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。
English
