我需要得到UTF-8工作在我的Java web应用程序(servlet + JSP,没有框架使用),以支持äöå等常规芬兰文本和西里尔字母ЦжФ为特殊情况。
我的设置如下:
开发环境:Windows XP 生产环境:Debian
使用数据库:MySQL 5.x
用户主要使用Firefox2,也有Opera 9。使用的浏览器类型为:FF3、IE7、谷歌Chrome。
如何做到这一点?
我需要得到UTF-8工作在我的Java web应用程序(servlet + JSP,没有框架使用),以支持äöå等常规芬兰文本和西里尔字母ЦжФ为特殊情况。
我的设置如下:
开发环境:Windows XP 生产环境:Debian
使用数据库:MySQL 5.x
用户主要使用Firefox2,也有Opera 9。使用的浏览器类型为:FF3、IE7、谷歌Chrome。
如何做到这一点?
当前回答
关于@kosoant回答....中提到的CharsetFilter
在tomcat web.xml中有一个内置的Filter(位于conf/web.xml)。过滤器名为setCharacterEncodingFilter,默认情况下是注释的。你可以取消注释(请记住取消注释它的过滤器映射)
此外,不需要在web.xml中设置jsp-config(我已经为Tomcat 7+测试了它)
其他回答
还有一点没有提到,这与使用Ajax的Java servlet有关。我有这样的情况,一个网页从用户接收utf-8文本,将其发送到一个JavaScript文件,该文件包含在发送给Servlet的URI中。Servlet查询数据库,捕获结果并将其作为XML返回给JavaScript文件,JavaScript文件将其格式化,并将格式化后的响应插入到原始网页中。
在一个web应用程序中,我遵循了一本早期Ajax书籍的指导,在构造URI时包装JavaScript。书中的例子使用了escape()方法,我发现(艰难的方法)是错误的。对于utf-8,必须使用encodeURIComponent()。
现在似乎很少有人自己编写Ajax,但我想我不妨加上这个。
如果你已经指定了连接池(mysql-ds.xml),在你的Java代码中,你可以像下面这样打开连接:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conn = DriverManager.getConnection(
"jdbc:mysql://192.168.1.12:3308/mydb?characterEncoding=greek",
"Myuser", "mypass");
关于@kosoant回答....中提到的CharsetFilter
在tomcat web.xml中有一个内置的Filter(位于conf/web.xml)。过滤器名为setCharacterEncodingFilter,默认情况下是注释的。你可以取消注释(请记住取消注释它的过滤器映射)
此外,不需要在web.xml中设置jsp-config(我已经为Tomcat 7+测试了它)
当我们想要使用Java访问MySql表时,这是用于希腊编码的:
在JBoss连接池中使用以下连接设置(mysql-ds.xml)
<connection-url>jdbc:mysql://192.168.10.123:3308/mydatabase</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>nts</user-name>
<password>xaxaxa!</password>
<connection-property name="useUnicode">true</connection-property>
<connection-property name="characterEncoding">greek</connection-property>
如果你不想把它放在JNDI连接池中,你可以将它配置为JDBC-url,如下所示:
jdbc:mysql://192.168.10.123:3308/mydatabase?characterEncoding=greek
为我和尼克,所以我们永远不会忘记,浪费时间.....
为了补充kosoant的答案,如果你使用Spring,而不是编写自己的Servlet过滤器,你可以使用他们提供的类org.springframework.web.filter.CharacterEncodingFilter,在你的web.xml中像这样配置它:
<filter>
<filter-name>encoding-filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>FALSE</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>