jsp Include html 乱码

在jsp中使用<%@include file=”in.html” %>导入html页面时,如果html页面里有中文,就会产生乱码。检查jsp文件和html文件的编码,编码一致,都是统一使用的utf-8,检查生成的Servlet类文件,发现里面直接就乱码了。

jsp页面内容:

  1. <%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>  
  2. <!DOCTYPE html PUBLIC ”-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>  
  3. <html>  
  4. <head>  
  5. <meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>  
  6. <title>测试JSP的include指令</title>  
  7. </head>  
  8. <body>  
  9. <%@include file=“in.html” %><br/>  
  10. <%@include file=“in1.jsp”%><br/>  
  11. <%@include file=“in2.html” %>  
  12. </body>  
  13. </html>  
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试JSP的include指令</title>
</head>
<body>
<%@include file="in.html" %><br/>
<%@include file="in1.jsp"%><br/>
<%@include file="in2.html" %>
</body>
</html>

in.html文件内容:

  1. <!DOCTYPE html PUBLIC ”-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>  
  2. <html>  
  3. <head>  
  4. <meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>  
  5. <title></title>  
  6. </head>  
  7. <body>  
  8. 我是in.html文件的内容  
  9. </body>  
  10. </html>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
我是in.html文件的内容
</body>
</html>
生成的Servlet内容:

  1. out.write(“<!DOCTYPE html PUBLIC \”-//W3C//DTD HTML 4.01 Transitional//EN\” \”http://www.w3.org/TR/html4/loose.dtd\”>\r\n”);  
  2. out.write(”<html>\r\n”);  
  3. out.write(”<head>\r\n”);  
  4. out.write(”<meta http-equiv=\”Content-Type\” content=\”text/html; charset=UTF-8\”>\r\n”);  
  5. out.write(”<title></title>\r\n”);  
  6. out.write(”</head>\r\n”);  
  7. out.write(”<body>\r\n”);  
  8. out.write(”ææ¯in.htmlæ件çå容\r\n”);  
  9. out.write(”</body>\r\n”);  
  10. out.write(”</html>\r\n”);  
out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
out.write("<title></title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("ææ¯in.htmlæ件çå容\r\n");
out.write("</body>\r\n");
out.write("</html>\r\n");

通过上面生成的Servlet内容可以看出,在将jsp文件编译成java类这一过程就出现了乱码,问题肯定是编码一致的,而设置编码的有两个:pageEncoding和contentType,这两个属性的区别如下:

pageEncoding是jsp文件本身的编码,是指定web容器将jsp编译成java文件时采用什么编码读取jsp文件。

contentType的charset设置的编码是指服务器发送给客户端时的内容编码。

而客户端访问一个jsp文件要经过如下三个阶段:

1、(第一次访问时)web容器将jsp编译成java文件,这个阶段编译器会根据pageEncoding设置的编码读取jsp文件,翻译成统一的utf-8的Servlet类,如果pageEncoding设置错误或未设置,编译出来的java文件就会出现中文乱码。

2、由javac将java源码编译成class字节码,javac用utf-8编码读取java源码,编译成utf-8编码的二进制文件。

3、web容器载入class字节码文件,将内容输出结果到客户端,这一过程内容的编码为contentType设置的编码。

由此可见,是由于pageEncoding设置问题导致翻译jsp时乱码。有两种方式处理:

方法一:在每个引入的html文件设置pageEncoding编码,即在html添加<%@page pageEncoding=”UTF-8”%>,尽管html不能识别该指令,但通过include指令引入时该指令就能起作用了,如下:

  1. <%@page pageEncoding=“UTF-8”%>  
  2. <!DOCTYPE html PUBLIC ”-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>  
  3. <html>  
  4. <head>  
  5. <meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>  
  6. <title></title>  
  7. </head>  
  8. <body>  
  9. 我是in.html文件的内容  
  10. </body>  
  11. </html>  
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
我是in.html文件的内容
</body>
</html>

方法二:在web.xml里统一配置pageEncoding的编码,在web-app标签里添加如下配置:

  1. <jsp-config>  
  2.     <jsp-property-group>  
  3.         <description>html encoding</description>  
  4.         <display-name>JSPConfiguration</display-name>  
  5.         <url-pattern>*.html</url-pattern>  
  6.         <el-ignored>true</el-ignored>  
  7.         <page-encoding>UTF-8</page-encoding>  
  8.         <scripting-invalid>false</scripting-invalid>  
  9.         <include-prelude></include-prelude>  
  10.         <include-coda></include-coda>  
  11.     </jsp-property-group>  
  12. </jsp-config>  
<jsp-config>
    <jsp-property-group>
        <description>html encoding</description>
        <display-name>JSPConfiguration</display-name>
        <url-pattern>*.html</url-pattern>
        <el-ignored>true</el-ignored>
        <page-encoding>UTF-8</page-encoding>
        <scripting-invalid>false</scripting-invalid>
        <include-prelude></include-prelude>
        <include-coda></include-coda>
    </jsp-property-group>
</jsp-config>

方法一和方法二原理是一样的,都是通过设置pageEncoding编码来指定jsp将html文件include时使用的编码。方法一和方法二任选一种即可,如果同时使用需要注意两个地方设置的pageEncoding编码必须一致,否则将会报如下编码不一致的错误:

  1. org.apache.jasper.JasperException: /in.html (line: 1, column: 2) Page-encoding specified in jsp-property-group (UTF-8) is different from that specified in page directive (GBK)  
org.apache.jasper.JasperException: /in.html (line: 1, column: 2) Page-encoding specified in jsp-property-group (UTF-8) is different from that specified in page directive (GBK)









            </div>
阅读更多
个人分类: Java后端 网页前端
上一篇eclipse使用maven 构建spring项目
下一篇js获取html表单里面的某一元素的值
想对作者说点什么? 我来说一句

JSP upload sample

2011年09月02日 5KB 下载

可以includejsp独立分页

2009年04月07日 1KB 下载

jsp乱码jsp乱码jsp乱码

2009年09月10日 91KB 下载

JSP解决乱码与数据库乱码解决

2011年10月13日 37KB 下载

jsp include 乱码问题的解决

2008年07月14日 56KB 下载

jsp页面调用js,弹出信息乱码

2011年11月04日 141B 下载

html页面部分乱码的问题

2018年03月27日 226KB 下载

jsp解决乱码方法总结

2009年08月19日 5KB 下载

jspInclude方式

2013年02月04日 8KB 下载

没有更多推荐了,返回首页

关闭
关闭