`

URL中文乱码解决(tomcat)

    博客分类:
  • java
阅读更多
一、初级解决方法
通过一番检索后,许多人采用了如下办法,首先对取得字符串按照 iso8859-1 进行解码转换,然后再按照 gb2312 进行编码,最后得到正确的内容。示例代码如下:
String para = new String( request.getParameter("para").getBytes("iso8859-1"), "gb2312");
具体的原因是因为美国人在写 tomcat 时默认使用 iso8859-1 进行编码造成的。
然而,在我们的 servlet 和 jsp 页面中有大量的参数需要进行传递,这样转换的话会带来大量的转换代码,非常不便。

二、入门级解决方法
后来,大家开始写一个过滤器,在取得客户端传过来的参数之前,通过过滤器首先将取得的参数编码设定为 gb2312 ,然后就可以直接使用 getParameter 取得正确的参数了。这个过滤器在 tomcat 的示例代码
jsp-examples 中有详细的使用示例, 其中过滤器在 web.xml 中的设定如下,示例中使用的是日文的编码,我们只要修改为 gb2312 即可
<filter> 
<filter-name>Set Character Encoding</filter-name> 
<filter-class>filters.SetCharacterEncodingFilter</filter-class> 
<init-param> 
<param-name>encoding</param-name> 
<param-value>EUC_JP</param-value> 
</init-param> 
</filter> 


public class SetCharacterEncodingFilter implements Filter { 
// 编码的字符串 
protected String encoding = null; 
// 过滤器的配置 
protected FilterConfig filterConfig = null; 
// 是否忽略客户端的编码 
protected boolean ignore = true; 
// 销毁过滤器 
public void destroy() { 
this.encoding = null; 
this.filterConfig = null; 
} 
// 过滤方法 
public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) 
throws IOException, ServletException { 
// 如果使用过滤器,忽略客户端的编码,那么使用通过过滤器设定编码 
if (ignore || (request.getCharacterEncoding() == null)) { 
String encoding = selectEncoding(request); 
if (encoding != null) 
request.setCharacterEncoding(encoding); 
} 
// 传送给下一个过滤器 
chain.doFilter(request, response); 
} 

// 初始化过滤器 
public void init(FilterConfig filterConfig) throws ServletException { 
this.filterConfig = filterConfig; 
this.encoding = filterConfig.getInitParameter("encoding"); 
String value = filterConfig.getInitParameter("ignore"); 
if (value == null) 
this.ignore = true; 
else if (value.equalsIgnoreCase("true")) 
this.ignore = true; 
else if (value.equalsIgnoreCase("yes")) 
this.ignore = true; 
else 
this.ignore = false; 
} 
// 返回过滤器设定的编码 
protected String selectEncoding(ServletRequest request) { 
return (this.encoding); 
} 
} 



然而在 tomcat5 中,即使使用过滤器,仍然可能取得乱码,原因何在呢?
三、高级解决方法
这是因为,在 tomcat4 和 tomcat5 中对参数的处理是不一样的,在 tomcat4 中 get 与 post 的编码是一样的,所以只要在过滤器中通过 request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。然而,在 tomcat5 中,get 与 post 的处理是分开进行的
在 tomcat 5 中,为了解决编码问题,tomcat 的作者作了很多努力,具体表现为在 tomcat 的配置文件 server.xml 中对 Connector 元素增加了如下的配置参数,专门用来对编码进行直接的配置
URIEncoding 用来设定通过 URI 传递的内容使用的编码,tomcat 将使用这里指定的编码对客户端传送的内容进行编码。
什么是 URI 呢?
java doc 的说明中如下说明:URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。
也就是说,我们通过 get 方法提交的参数实际上都是通过 uri 提交的,都由这个参数管理,如果没有设定这个参数,则 tomcat 将使用默认的 iso8859-1 对客户端的内容进行编码。
useBodyEncodingForURI 使用与 Body 一样的编码来处理 URI, 这个设定是为了与 tomcat4保持兼容,原来在 tomcat4 和 tomcat5 中队参数的处理是不一样的,在 tomcat4 中 get 与 post 的编码是一样的,所以只要在过滤器中通过 request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。然而,在 tomcat5 中,get 与 post 的处理是分开进行的,对 get 的处理通过 前面的 URIEncoding 进行处理,对 post 的内容依然通过 request.setCharacterEncoding 处理,为了保持兼容,就有了这个设定。
将 useBodyEncodingForURI 设定为真后,就可以通过 request.setCharacterEncoding 直接解决 get 和 post 中的乱码问题。
这样,我们可以通过在 server.xml 中设定 URIEncoding 来解决 get 方法中的参数问题,使用过滤器来解决 post 方法中的问题。
或者也可以通过在 server.xml 中设定 useBodyEncodingForURI 为 true ,配合过滤器来解决编码的问题。
在这里,我强烈建议在网站的创作过程中,全程使用 utf-8 编码来彻底解决乱码问题。
具体操作如下:
1、页面内容使用 utf-8 格式保存,在页面中加入 <mete http-equiv="contentType" content="textml;charst=utf-8">
2、服务器端的 server.xml 中设定 useBodyEncodingForURI = true
3、使用过滤器,过滤器设定编码为 utf-8

分享到:
评论
2 楼 yongsky 2010-01-05  
找到了,补充下。
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="GBK" useBodyEncodingForURI="true"/>[/xml]
1 楼 yongsky 2010-01-05  
大哥,useBodyEncodingForURI = true 加在什么地方最好说清楚嘛,不然还要去别的地方找..

相关推荐

    解决Tomcat中文乱码

    ### 解决Tomcat中文乱码问题 在使用Tomcat服务器部署Web应用时,经常会遇到中文乱码的问题。本文将详细探讨这一现象的原因,并提供一种有效的解决方案。 #### 问题背景 在Tomcat环境下运行Web应用程序时,如果...

    java中文乱码之解决URL中文乱码问题的方法

    总之,解决Java中的URL中文乱码问题需要理解URL编码的原理,并在客户端和服务器端采取相应的措施,确保编码和解码的一致性。无论是通过JavaScript编码、Java服务器端解码,还是调整服务器配置,关键在于确保字符集的...

    如何解决Tomcat下中文乱码问题?

    总结来说,解决Tomcat下的中文乱码问题,关键在于确保JSP页面的编码与服务器设置一致,并在处理表单提交时正确设置请求的字符编码。在实际开发中,推荐使用UTF-8作为统一的编码标准,因为UTF-8能够兼容各种语言,...

    tomcat值乱码解决

    某些通过URL来传送、值为汉字的参数,在页面中显示的是乱码,但是在本地开发环境是正常显示的。排除的因素当然就是服务器的设置不当了,但具体是那些原因呢?一般我们所装的linux服务器,是中文版的,所以系统环境的...

    解决tomcat中文乱码问题.doc

    ### 解决Tomcat中文乱码问题 在使用Tomcat服务器部署Web应用时,经常会遇到中文乱码的问题。本文将详细探讨几种常见的乱码场景及其解决方案。 #### 一、JSP页面上的中文显示为乱码 **问题描述**:在JSP页面中直接...

    解决tomcat中文乱码问题

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

    关于tomcat乱码以及tomcat jvm 内存溢出问题的解决方案和理论

    标题中的“关于tomcat乱码以及tomcat jvm 内存溢出问题的解决方案和理论”涉及了两个关键的IT概念:Tomcat服务器的字符编码问题和Java虚拟机(JVM)内存管理的问题。让我们逐一深入探讨这两个主题。 首先,我们来...

    Tomcat和weblogic中文乱码问题解决方案

    Tomcat和WebLogic中文乱码问题解决方案 在 Java Web 开发中,中文乱码问题一直是困扰开发者的主要问题之一。 Tomcat 和 WebLogic 是两个常用的 web 服务器,都是支持 Servlet 和 JSP 的。然而,在使用这些服务器时...

    修改Tomcat默认编码消除get方式传递参数出现中文乱码

    本文将深入探讨如何修改Tomcat的默认编码设置,以解决GET方式传递参数时出现的中文乱码问题。 #### Tomcat默认编码解析 默认情况下,Tomcat在处理HTTP请求时,采用的是ISO-8859-1编码,这是一种只支持西欧语言的...

    tomcat与servlet乱码解决办法

    ### Tomcat与Servlet乱码问题解析及解决方案 #### 一、引言 在Web开发过程中,经常遇到的一个问题就是字符编码的问题,特别是在处理中文字符时,如果编码设置不当,很容易出现乱码的情况。本文主要围绕Tomcat服务器...

    url地址传参中文乱码处理

    "URL地址传参中文乱码处理" URL地址传参中文乱码处理是指在Web应用程序中,将中文参数传递给...在处理URL地址传参中文乱码时,需要根据具体情况选择合适的解决方案,并注意编码问题、特殊字符处理和Tomcat配置等方面。

    配置web-xml解决中文乱码问题.pdf

    首先,需要确定中文乱码问题不是由浏览器引起的,然后讨论了 Tomcat 服务器配置和数据库 bean 配置中的一些解决方案。 一、浏览器配置问题 在讨论解决方案之前,需要确定中文乱码问题不是由浏览器引起的。在使用 ...

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

    Tomcat 中文乱码解决方法参考 Tomcat 中文乱码问题是 Web 开发中常见的问题之一,本文将详细介绍解决 Tomcat 中文乱码的方法。 一、设置网页编码 在 Tomcat 中,设置网页编码是解决中文乱码的关键。可以通过 ...

    tomcat显示出现中文乱码问题.docx

    总的来说,解决Tomcat中文乱码问题需要综合考虑请求、响应以及日志输出等多个环节的字符编码设置。通过以上步骤和注意事项,大部分情况下可以有效地解决乱码问题。如果仍然存在问题,可能需要进一步排查应用程序本身...

    tomcat5中文问题完美解决

    【Tomcat5中文问题解决详解】 在使用Tomcat5运行含有中文内容的应用程序时,可能会遇到中文乱码的问题。这通常涉及到HTTP请求的处理方式,尤其是对于POST和GET请求的不同处理策略。以下是对该问题的深入解析及解决...

    彻底解决 Tomcat 5 下文字乱码问题 - JSP日志 - ※一路风尘※

    本文将深入探讨如何解决Tomcat 5中的文字乱码问题,尤其是针对JSP日志的处理。 首先,我们要理解乱码问题的根源。乱码通常发生在数据的编码、传输和解码过程中,当不同的环节使用不一致的字符集时,就可能出现乱码...

    JSP汉字乱码解决大全

    ### JSP中的中文乱码问题解析与解决方案 #### 一、引言 在Web开发过程中,尤其是使用Java Server Pages(JSP)进行页面渲染时,经常会出现中文字符显示乱码的问题。这不仅影响用户体验,也增加了项目的调试难度。...

    java解决中文乱码问题

    Tomcat 5.5 中文乱码的问题可以使用 CharacterEncodingFilter 来解决。首先,需要将 %TOMCAT 安装目录%/webapps/servlets-examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.class 文件拷到你的 webapp ...

    乱码问题的解决

    "乱码问题的解决" 在 Web 开发中,乱码问题是常见的...乱码问题的解决需要从多方面入手,包括设置页面编码、服务器编码、客户端编码、数据库编码和超链接的 url 编码等。只有通过统一编码,才能避免乱码问题的出现。

Global site tag (gtag.js) - Google Analytics