教你彻底解决 Tomcat 5下文字乱码问题 发布时间:2007.12.06 04:53 来源:赛迪网 作者:执木
使用 tomcat 时,相信大家都回遇到中文乱码的问题,具体表现为通过表单取得的中文数据为乱码。 下面是本人解决之路。 一、初级解决方法 通过一番检索后,许多人采用了如下办法,首先对取得字符串按照 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="text/html;charst=utf-8"> 2、服务器端的 server.xml 中设定 useBodyEncodingForURI = true 3、使用过滤器,过滤器设定编码为 utf-8 (责任编辑:包春林) 来自:http://java.ccidnet.com/art/3539/20071205/1298139_1.html<!---->
分享到:
相关推荐
在IT行业中,尤其是在Web开发领域,Tomcat是一个广泛使用的开源应用服务器,主要处理Java Servlet和JSP...通过这些步骤,开发者能够有效避免和解决Tomcat 5下的文字乱码问题,使得JSP日志和其他文本数据能够正常显示。
解决tomcat中文乱码问题,有详细的解释说明,希望对需要的人有所帮助
解决 Tomcat 下中文乱码问题 在本文中,我们将讨论如何解决 Tomcat 下中文乱码问题。该问题是由于 Tomcat 默认的字符编码设置不正确引起的。我们将通过设置 Connector 元素的 URIEncoding 属性和在过滤器中设置字符...
总结来说,解决Tomcat下的中文乱码问题,关键在于确保JSP页面的编码与服务器设置一致,并在处理表单提交时正确设置请求的字符编码。在实际开发中,推荐使用UTF-8作为统一的编码标准,因为UTF-8能够兼容各种语言,...
Docker 容器中 Tomcat 部署...在 Dockerfile 中添加环境变量 ENV LC_ALL en_US.UTF-8,然后重新构建 Docker 镜像和启动容器即可解决问题。同时,我们也需要注意在 Docker 容器中设置 locale 的重要性,以避免各种问题。
Tomcat和WebLogic中文乱码问题解决方案 在 Java Web 开发中,中文乱码问题一直是困扰开发者的主要问题之一。 Tomcat 和 WebLogic 是两个常用的 web 服务器,都是支持 Servlet 和 JSP 的。然而,在使用这些服务器时...
本文将详细介绍如何解决Tomcat中的中文乱码问题。 首先,我们需要理解Tomcat的字符编码处理流程。Tomcat在接收HTTP请求时,会根据`Connector`元素的`useBodyEncodingForURI`属性和`URIEncoding`属性来确定请求参数...
### 解决Tomcat中文乱码问题 在使用Tomcat服务器部署Web应用时,经常会遇到中文乱码的问题。本文将详细探讨这一现象的原因,并提供一种有效的解决方案。 #### 问题背景 在Tomcat环境下运行Web应用程序时,如果...
综上所述,通过合理设置JSP页面编码、配置请求过滤器以及进行必要的编码转换,可以有效解决Tomcat环境下中文乱码的问题。在实际应用中,还需要根据具体情况选择合适的解决方案,并注意保持前后端编码的一致性。
要解决 Ubuntu 下使用 Tomcat 搭建网站出现中文乱码的问题,需要统一服务器的字符编码,包括 Linux 服务器、Tomcat 配置文件和 MySQL 数据库。通过统一字符编码,可以确保服务器的字符编码是一致的,避免乱码的出现...
tomcat get提交中文乱码解决方案,修改tomcat server.xml 中以下为
值得注意的是,虽然此方法在很多情况下可以解决问题,但并非所有情况都适用。例如,如果日志输出被其他中间件或者应用本身编码设置覆盖,那么仅修改`JAVA_OPTS`可能不够。此外,还需要检查Linux服务器的系统编码(如...
将cmd编码格式永久改为utf-8,解决部署以后tomcat乱码问题
最近几个项目,都出现了乱码问题。某些通过URL来传送、值为汉字的参数,在页面中显示的是乱码,但是在本地开发环境是正常显示的。排除的因素当然就是服务器的设置不当了,但具体是那些原因呢?一般我们所装的linux...
本文将详细探讨WebLogic与Tomcat环境下解决下载附件乱码问题的方法。 #### 一、问题背景 在Web应用程序中,当用户点击下载链接后,浏览器会根据服务器返回的信息来判断如何处理这个下载请求。如果服务器返回的...
在某些情况下,如果控制台默认支持GBK编码,那么设置成GBK或许可以解决问题。 6. **阅读附加文档**: 另一个文件`解决Tomcat控制台中文乱码_lj成功.txt`可能包含了具体的解决方案或者某位名为“lj”的用户的成功...
在使用Apache Tomcat服务器运行Java Web应用程序时,有时会遇到中文...通过以上步骤,通常可以有效地解决Tomcat下的中文乱码问题。如果问题依然存在,可能需要进一步检查服务器配置、网络传输过程中的编码转换等环节。
本文主要围绕Tomcat服务器下JSP页面以及Servlet中的乱码问题进行深入分析,并提供相应的解决方案。 #### 二、JSP页面乱码原因及解决方法 ##### 2.1 JSP页面乱码的原因 JSP页面中的乱码通常由以下几个因素引起: 1....