`
rainbow686
  • 浏览: 163951 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jsp include 乱码问题的解决

    博客分类:
  • Java
阅读更多

 jsp include 乱码问题的解决
jsp include 的文件有时候会出现乱码,经过测试发现如下方法可以修改。
第一种情况可以修改被include的文件:
1.当jsp include动态文件时(jsp文件)可以在被include的jsp文件头部加上代码:

java 代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>  

2.当jsp include静态文件时(html文件)可以在被include的html文件的<head></head>标签内加上代码:

xml 代码
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  

第二种情况不能够修改被include的文件:
此时可以修改tomcat的web.xml达到目的

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  6.   
  7.     <jsp-config>  
  8.         <jsp-property-group>  
  9.             <description>  
  10.                 Special property group for JSP Configuration JSP   
  11.                 example.   
  12.             </description>  
  13.             <display-name>JSPConfiguration</display-name>  
  14.             <url-pattern>*.jsp</url-pattern>  
  15.             <el-ignored>true</el-ignored>  
  16.             <page-encoding>UTF-8</page-encoding>  
  17.             <scripting-invalid>false</scripting-invalid>  
  18.             <include-prelude></include-prelude>  
  19.             <include-coda></include-coda>  
  20.   
  21.             <description>  
  22.                 Special property group for JSP Configuration JSP   
  23.                 example.   
  24.             </description>  
  25.             <display-name>JSPConfiguration</display-name>  
  26.             <url-pattern>*.html</url-pattern>  
  27.             <el-ignored>true</el-ignored>  
  28.             <page-encoding>UTF-8</page-encoding>  
  29.             <scripting-invalid>false</scripting-invalid>  
  30.             <include-prelude></include-prelude>  
  31.             <include-coda></include-coda>  
  32.         </jsp-property-group>  
  33.     </jsp-config>  
  34.   
  35. </web-app>  

其中jsp-config一段是用来说明你要将包含的页面默认按照什么编码格式包含。web-app 标签的version必须是2.4的。
具体可以参见
http://www.javaworld.com.tw/jute/post/view?bid=9&id=44041&sty=1&tpg=1&age=-1

分享到:
评论
6 楼 nakupanda 2008-08-13  
我发现liquidthinker同学没有理清现在我们关注的问题,现在我们关注的是编译期组合出来的文件乱码问题,而不是客户与服务器交互时的乱码问题.
5 楼 rainbow686 2007-09-14  
有意思啊!
4 楼 dengyin2000 2007-09-14  
啊B, 你的帖子被水了!!!
3 楼 liquidthinker 2007-09-14  
在weblogic里面是不能在include page里面再定义contentType的




如果熟悉http,熟悉servlet,明白其中原理,永远都不会遇到乱码问题。


大概说说get和post两种方式:

get需要手工编码解码,手工的意义是编解码过程不是web server来做,甚至web server都不知道你用了什么字符集,但是你自己应该知道。或者程序里用代码,或者客户端浏览器。如果是程序编解码,应该知道对应于各种字符集,编解码规则是怎样的,如果不知道,jdk中提供了java.net.URLDecoder和java.net.URLEncoder两个类,它们都分别有两个带参数和不带参数的编解码方法,不带参数的,使用平台默认的字符集,带参数的,传入的参数作为字符集。其中使用平台默认的含义,不是指java文件编码的字符集,这个默认都是utf8(因此在java里面可以用中文命名类、变量等;可以将utf8兼容的任何语言的字符串保存在String中),而是与语言有关的,比如中文平台下,很可能是gbk,英文平台下可能为iso-8859-1。编解码使用的字符集理论上要一致(兼容也可以,比如gbk和gb2312,但gb2312对应于gbk的补集的内容会是乱码)。为了保持一致的编码解码字符集,需要在方法传入时显式指定一致的字符集。jdk不推荐使用无参的方法,原因就是你可能在一个平台下编译,一个平台下测试,一个平台下部署,如果这些平台的默认字符集不相同,乱码就会出现了。另一种是客户端浏览器的编解码,不同的浏览器不尽相同,比如ie选项里面的“发送utf-8 url”,在ie页面右键选择“编码”等等就是做的这样的事。

然后说说post的情况,post的http消息体是二进制的,编码可以是浏览器、程序员,解码是web server做的事,但是程序员可以干涉。servlet规范要求的默认字符集是iso-8859-1,为什么会有这样的规则,使用中文不是很麻烦吗?自己想想吧,原因可以理解为商品的标签上是rmb100,那你不会花rmb200来买它。那么如何干涉web server用指定的字符集去解码呢?举个例子,一个html page,如果有下面的指定:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

首先浏览器会以utf8将http消息体编码后发送给web server,web server接收到后其实是并不知道是哪种字符集,这个时候它会按一定规则去这些地方找字符集:http消息头的locale、http消息头的Accept-Language、http消息头的Accept-Charset、request.getCharacterEncoding()方法(有优先关系的,具体的记不住了),如果找不到的话,就默认了(iso-8859-1),如果接收的时候是用的utf8或其它不是iso-8859-1的字符集,那么乱码就出现了。前面提到的http消息头,是浏览器发送过来的,这里面又有一些规则,国际化,包括spring,就是在这里面做的文章。先不管http消息头规则,我们知道web server会去找request.getCharacterEncoding()方法,那么我们可以干涉的地方就出现了,与之对应的request.setCharacterEncoding()方法,让我们设置正确的字符集,然后再被web server利用此字符集解码,然后我们就可以得到post过去的被正确解码的数据了。dengyin2000同学所说用filter其实就是利用了这点来干涉,解决问题的。

希望这个大概的解释能有一些帮助,在网上看到其它文章,要么是没有说到问题本质,要么根本就是在乱说。
2 楼 liquidthinker 2007-09-14  
在weblogic里面是不能在include page里面再定义contentType的
如果熟悉http,熟悉servlet,明白其中原理,永远都不会遇到乱码问题。
大概说说get和post两种方式:
get需要手工编码解码,手工的意义是编解码过程不是web server来做,甚至web server都不知道你用了什么字符集,但是你自己应该知道。或者程序里用代码,或者客户端浏览器。如果是程序编解码,应该知道对应于各种字符集,编解码规则是怎样的,如果不知道,jdk中提供了java.net.URLDecoder和java.net.URLEncoder两个类,它们都分别有两个带参数和不带参数的编解码方法,不带参数的,使用平台默认的字符集,带参数的,传入的参数作为字符集。其中使用平台默认的含义,不是指java文件编码的字符集,这个默认都是utf8(因此在java里面可以用中文命名类、变量等;可以将utf8兼容的任何语言的字符串保存在String中),而是与语言有关的,比如中文平台下,很可能是gbk,英文平台下可能为iso-8859-1。编解码使用的字符集理论上要一致(兼容也可以,比如gbk和gb2312,但gb2312对应于gbk的补集的内容会是乱码)。为了保持一致的编码解码字符集,需要在方法传入时显式指定一致的字符集。jdk不推荐使用无参的方法,原因就是你可能在一个平台下编译,一个平台下测试,一个平台下部署,如果这些平台的默认字符集不相同,乱码就会出现了。另一种是客户端浏览器的编解码,不同的浏览器不尽相同,比如ie选项里面的“发送utf-8 url”,在ie页面右键选择“编码”等等就是做的这样的事。
然后说说post的情况,post的http消息体是二进制的,编码可以是浏览器、程序员,解码是web server做的事,但是程序员可以干涉。servlet规范要求的默认字符集是iso-8859-1,为什么会有这样的规则,使用中文不是很麻烦吗?自己想想吧,原因可以理解为商品的标签上是rmb100,那你不会花rmb200来买它。那么如何干涉web server用指定的字符集去解码呢?举个例子,一个html page,如果有下面的指定:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

首先浏览器会以utf8将http消息体编码后发送给web server,web server接收到后其实是并不知道是哪种字符集,这个时候它会按一定规则去这些地方找字符集:http消息头的locale、http消息头的Accept-Language、http消息头的Accept-Charset、request.getCharacterEncoding()方法(有优先关系的,具体的记不住了),如果找不到的话,就默认了(iso-8859-1),如果接收的时候是用的utf8或其它不是iso-8859-1的字符集,那么乱码就出现了。前面提到的http消息头,是浏览器发送过来的,这里面又有一些规则,国际化,包括spring,就是在这里面做的文章。先不管http消息头规则,我们知道web server会去找request.getCharacterEncoding()方法,那么我们可以干涉的地方就出现了,与之对应的request.setCharacterEncoding()方法,让我们设置正确的字符集,然后再被web server利用此字符集解码,然后我们就可以得到post过去的被正确解码的数据了。dengyin2000同学所说用filter其实就是利用了这点来干涉,解决问题的。

希望这个大概的解释能有一些帮助,在网上看到其它文章,要么是没有说到问题本质,要么根本就是在乱说。
1 楼 dengyin2000 2007-09-14  
有没有试过EncodingFilter?

相关推荐

    jsp include文件时的一个乱码解决方法.docx

    JSP Include 文件时的一个乱码解决方法 在 JSP 开发中,include 文件是一个常用的技术手段,可以将公共的代码或者组件包含到不同的页面中,以提高代码的复用性和维护性。然而,在使用 JSP include 文件时,经常会...

    JSP中文乱码处理JSP中文乱码处理

    总结来说,解决JSP中文乱码问题的关键在于:明确JSP文件的编码,正确设置HTTP请求的解码,以及统一响应内容和数据库的字符集。同时,要注意在每个可能产生编码转换的环节都要进行适当的检查和配置,以确保数据的完整...

    JSP利用过滤器解决request中文乱码问题.docx

    JSP利用过滤器解决request中文乱码问题 JSP中requestgetParameter中文乱码问题是经常遇到的问题,解决这个问题有多种方法,但利用过滤器解决request中文乱码问题是其中最有效的一种方法。本文将详细介绍如何使用...

    5种JSP页面显示为乱码的解决方法

    ### 五种解决JSP页面乱码问题的方法 在Web开发过程中,经常遇到的一个问题是页面显示乱码。尤其是在使用Java Server Pages(JSP)技术时,由于编码设置不当导致中文等非ASCII字符不能正常显示的问题尤为突出。本文...

    解决JSP页面中文乱码问题

    ### 解决JSP页面中文乱码问题 #### 一、问题背景 在使用JSP(Java Server Pages)技术开发Web应用程序的过程中,经常会遇到中文乱码的问题。特别是在接收表单提交的数据或者显示数据库查询结果时,中文字符可能会...

    JSP中文乱码解决

    下面将详细解释如何解决JSP中的中文乱码问题,并结合给定的文件内容进行说明。 1. **理解乱码问题**: 中文乱码通常出现在两个场景:一是网页显示的乱码,二是请求数据处理过程中的乱码。前者可能是由于HTML或JSP...

    Struts2资源文件在jsp页面中显示乱码解决

    通过上述两种解决方案,我们可以有效解决Struts2资源文件在JSP页面中显示乱码的问题。虽然第一种方法可以达到目的,但其带来的维护不便使其不被推荐;相比之下,安装PropertiesEditor插件不仅操作简便,还能彻底解决...

    jsp include文件时的一个乱码解决方法

    做网站程序,一般对session的验证都会放到一个include文件里,在这个文件里通常也会显示一些验证结果的信息。

    JSP用过滤器解决request getParameter中文乱码问题.docx

    总的来说,通过在过滤器中设置合适的字符编码,我们可以有效地解决JSP应用中请求参数中文乱码的问题。需要注意的是,选择哪种字符编码取决于你的应用需求,不同的编码可能会适用于不同的环境和用户群体。此外,如果...

    解决tomcat中文乱码问题

    ### 解决Tomcat中文乱码问题的详尽指南 在Java Web开发中,尤其是在使用Apache Tomcat服务器时,中文乱码问题是开发者常遇到的难题之一。本文将详细解析如何在Tomcat环境中解决中文乱码问题,确保中文字符的正确...

    JSP乱码处理

    JSP 乱码处理是 Web 开发中常见的问题之一,解决乱码问题需要了解 JSP 页面的编码机制和相关设置。本文将详细介绍 JSP 乱码处理的各种解决方法。 1. PageEncoding 属性 JSP 文件的存储格式是通过 pageEncoding ...

    JSP利用过滤器解决request中文乱码问题

    因此,为了解决request中文乱码问题,JSP提供了一种使用过滤器(Filter)的方法。 在JSP中使用过滤器来解决中文乱码问题的步骤大致如下: 首先,要创建一个过滤器类,该类需要实现javax.servlet.Filter接口。在该...

    基于jsp:included的使用与jsp:param乱码的解决方法

    本文中涉及到的核心知识点包括了JSP标签库中的&lt;jsp:include&gt;标签的使用以及解决通过&lt;jsp:param&gt;标签传递参数时出现的乱码问题。 首先,让我们来了解&lt;jsp:include&gt;标签的使用。在JSP页面中,&lt;jsp:include&gt;标签被用来...

    JSP常见的三个编译指令page、include、taglib

    JSP常见的三个编译指令 1、page指令 是针对当前页面的指令 2、include指令 用于指定包含另一个页面 3、taglib指令 用于定义和访问自定义标签 ...included的使用与jsp:param乱码的解决方法jsp include引

    Tomcat中文乱码解决方法参考.pdf

    五、jsp 动作指令传递中文乱码解决 在使用 jsp 动作指令(如 jsp:forward、jsp:include)时,只需在原页面中设置 request 的字符编码格式为当前网页编码即可。例如: 原页面 param.jsp 代码(设网页编码为 gb2312...

    JSP用过滤器解决request getParameter中文乱码问题

    在使用Java服务器页面(JSP)技术开发Web应用程序时,...总结来说,通过在JSP中使用过滤器设置正确的字符编码,并通过web.xml进行适当配置,可以有效地解决在使用request.getParameter()读取参数时遇到的中文乱码问题。

    JSP内置对象之域对象和JSP指令

    ### JSP内置对象之域对象和JSP指令详解 #### JSP内置对象之域对象 在JSP技术中,有几种内置对象被称为“域对象”,它们用于存储数据,并且具有...通过以上方法,可以有效地解决JSP开发过程中遇到的各种中文乱码问题。

Global site tag (gtag.js) - Google Analytics