jsp Include html 乱码

7人阅读 评论(0) 收藏 举报
分类:

在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>
查看评论

jsp通过include指令引入html乱码的解决方法

在jsp中使用导入html页面时,如果html页面里有中文,就会产生乱码。检查jsp文件和html文件的编码,编码一致,都是统一使用的utf-8,检查生成的Servlet类文件,发现里面直接就乱码了。...
  • gnail_oug
  • gnail_oug
  • 2016-06-18 22:11:48
  • 17501

JSP include HTML出现乱码

JSP页面中声明了contentType="text/html; charset=UTF-8", 被include的静态html中也包含了,但显示时JSP部分的能正常显示,被包含的部分却是乱码,而单...
  • prstaxy
  • prstaxy
  • 2014-07-09 18:30:35
  • 5243

如何解决jsp:include标签在包含html文件时遇到的乱码问题

在一个JSP页面中,常常需要包含另一个文件,JSP为我们提供了jsp:include标签可以完成这个功能,比如:,在自定义Tag中,我们可以通过pageContext.include(file);的方...
  • stevencn76
  • stevencn76
  • 2015-08-06 07:32:22
  • 5383

jsp include html 乱码问题 <%@ include page=""%>

在使用 zhiling
  • sessionsong
  • sessionsong
  • 2014-08-23 17:02:56
  • 5658

jsp中include使用html静态文件出现乱码问题

问题:在jsp中include jsp动态页面不会产生乱码问题,可是如果include file="*.html"时候出现了中文乱码的问题 问题根源:pageEncoding的问题 ...
  • q291611265
  • q291611265
  • 2015-06-02 00:03:07
  • 1450

jsp include标签引入html文件中文乱码问题解决

有两种方式: 1、在所有的html页面加入 2、在web.xml中配置 Special property gr...
  • u012009613
  • u012009613
  • 2016-08-06 21:55:51
  • 1418

关于web工程jsp@include 包含html和txt乱码问题的解决办法

前几天学JSP,发现当           会出现乱码的情况,但是  就不会出现乱码情况。 然后看了好多的博客修改了很多地方,将所有的文件都改为UTF-8,或者gbk、gb2312,然并卵。包括修改...
  • yangshuai6813
  • yangshuai6813
  • 2015-09-16 23:42:09
  • 1210

使用jsp include标签包含静态页面出现的乱码问题

jsp include页面出现问题的解决方法: 1.当jsp include动态文件时(jsp文件)可以在被include的jsp文件头部加上代码: 2.当jsp include静态文...
  • jdfkldjlkjdl
  • jdfkldjlkjdl
  • 2014-09-15 21:54:38
  • 2055

JSP include 引入页面文件乱码 解决办法

解决JSP include 引入文件出现乱码解决办法一: 第一种情况可以修改被include的文件: 1.当jsp include动态文件时(jsp文件)可以在被include的jsp文件头部加上...
  • zhouzhiwengang
  • zhouzhiwengang
  • 2016-06-08 10:00:00
  • 2564

jsp:forward jsp:include传中文参数乱码问题的解决方法

jsp的forward指令用于将页面响应转发到另外的页面,可以转发到静态的HTML页面,也可以转发到动态的JSP页面,还可以转发到容器中的Servlet。在进行转发时,可以通过jsp:param指令增...
  • gnail_oug
  • gnail_oug
  • 2016-06-19 00:09:24
  • 2422
    个人资料
    持之以恒
    等级:
    访问量: 1043
    积分: 127
    排名: 119万+
    文章存档