请教使用jsp:include的问题

05-10-07 ljxljx
<%@ page pageEncoding="GBK"%>
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
 <title>jsp</title>
</head>
中文字
<body bgcolor=#f0f0f0>
    <jsp:include page="testJsp2.jsp" flush = "true" >
	<jsp:param name="bgcolor" value="黄色" />
    </jsp:include >
</body>
</html>
<p>

请教各位:

我尝试使用 jsp:include的动作,插入外部的jsp,但查看Tomcat生成的源代码后,发现“黄色”两字被转换成 BB%C6%C9%AB (GBK码),而不是UTF-8 ,请问是因为这句

<%@ page pageEncoding="GBK"%>
<p>

引起的吗?

但是我如果不加入 pageEncoding=GBK的话,“中文字”三个字在Tomcat生成的源代码中,又出现乱码啊。

请问如果使用UTF-8统一编码,我还缺什么地方没有设置呢?

ljxljx
2005-10-07 18:04
我使用的是 Tomcat 4.1

后来把 pageEncoding改成UTF-8,并使用UTF-8保存jsp文件。

代码变了一下

<%@ page pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head> 
<title>jsp</title>
</head>
<body bgcolor=#f0f0f0>
中文字
<% String a = "中文字"; %>    
    <jsp:include page="testJsp2.jsp" flush = "true" >	
    	<jsp:param name="bgcolor" value='<%= a %>' />   
    </jsp:include >
</body>
</html>
<p>

后来再查了一下tomcat生成的文件,

发现插入的是以下一句:

JspRuntimeLibrary.include(request, response, "testJsp2.jsp" + "?" + "bgcolor=" + 
java.net.URLEncoder.encode("" +  a ), out, true);
<p>

他使用了 encode(String s) 的方法,而不是 encode(String s , String charset);

请问各位~~,是否有办法控制那个编码的字符集,让他用 UTF-8呢?

banq
2005-10-08 12:31
你在被include的testJsp2.jsp的头部中也使用:

<%@ page contentType="text/html;charset=UTF-8" %>
<p>

ljxljx
2005-10-09 12:16
谢谢banq老师的回复~!

我在被inclue的文件也加上 contentType="text/html;charset=UTF-8"

但是传递的参数还是乱码了。。。

JspTest2.jsp

<%@ page pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head> 
<title>jsp</title>
</head>
<body bgcolor=#f0f0f0>
中文字 <br>
<% String a = "中文字"; %>    
<jsp:include page="testJsp2.jsp" flush = "true" >	
    	<jsp:param name="bgcolor" value='<%= a %>' />   
</jsp:include >
</body>
</html>
<p>

testJsp2.jsp

<%@ page pageEncoding="UTF-8" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%= "六" + (int)(Math.random()*1000) %> <br>
<%= request.getParameter("bgcolor") %> <br>
<p>

JspTest2.jsp 输出的结果为:

中文字

六605

ÖÐÎÄ×Ö

tomcat4 页转换时生成的JspTest_jsp.java文件中对应include一句是这样的

JspRuntimeLibrary.include(request, response, "testJsp2.jsp" + "?" + "bgcolor=" + java.net.URLEncoder.encode("" +  request.getParameter("bgcolor")), out, true);
<p>

听说 encode(String s) 是使用系统file.encoding的默认字符集进行编码的,我的系统是中文WINxp ,请问问题是出在这里吗?

谢谢!

猜你喜欢