0

嗨,我正在尝试使我正在使用 UTF-8 兼容的应用程序之一。我的环境如下:linux os,apahce web server作为http监听器,tomcat作为servlet引擎

使用 mod_jk 配置的 apache 和 tomcat 使用 ajp 连接器。

我已经从几个站点阅读了 UTF-8 的基本指南,并根据我尝试了以下建议的建议

在 server.xml 中设置 URIEncoding="UTF-8"和 用于连接器useBodyEncodingForURI =true

使用在 bashrc/.profile 中设置语言 LANG =en_US.UTF8

将 apache 服务器配置为默认使用 utf-8 编码,即指定 utf-8 作为默认字符集

AddDefaultCharset utf-8

启动 tomcat 时将 utf-8 设置为 java args。使用

JAVA_OPTS="-Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8"

我还验证了我的网页是否有正确的元标记配置为

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

尽管如此,我仍然难以阅读 UTF-8 字符。知道我哪里出错了吗?

一个有趣的观察是,我只在使用 Internet exporer 和 chorme 时遇到困难。当我使用火狐将 utf-8 字符发送到我的服务器时,我能够正确读取它们。但是,IE 和 chorme 的字符越来越混乱。知道问题可能出在哪里吗?

我在 chrome 和 Fire fox 之间唯一能注意到的变化是 contentType 标头中的变化。

来自firefox的请求的请求头如下

Content-Type: application/x-www-form-urlencoded; charset=utf-8 

至于chrome(以及可能的IE,我没有检查)是

Content-Type: application/x-www-form-urlencoded 

知道这里出了什么问题吗?

4

1 回答 1

1

Allrite,终于解决了这个问题。下面的链接和底部报告的错误列表对于了解正在发生的马戏团非常有用:

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

基本上我的过滤器之一是试图读取请求参数,而一个需要做请求。setCharacterEncoding(desiredEncoding) 在读取查询参数之前。

所以,我尝试添加设置字符编码的SetCharacterEncodingFilter,显然这也不起作用,因为这个过滤器在tomcat 7(虽然不确定)中可用并且我在tomcat6.0.x上。

所以必须编写我自己的过滤器来正确设置 charEncoding。

有了这个,现在我可以把所有这些托管的角色都从我的脑海中抹去。从昨天晚上开始,他们就太烦我了..

于 2013-11-01T09:26:38.260 回答