我需要得到UTF-8工作在我的Java web应用程序(servlet + JSP,没有框架使用),以支持äöå等常规芬兰文本和西里尔字母ЦжФ为特殊情况。

我的设置如下:

开发环境:Windows XP 生产环境:Debian

使用数据库:MySQL 5.x

用户主要使用Firefox2,也有Opera 9。使用的浏览器类型为:FF3、IE7、谷歌Chrome。

如何做到这一点?


当前回答

如果你已经指定了连接池(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");

其他回答

有时候你可以通过MySQL管理员向导来解决问题。在

启动变量>高级>

并设置Def. char set:utf8

可能这个配置需要重启MySQL。

还有一点没有提到,这与使用Ajax的Java servlet有关。我有这样的情况,一个网页从用户接收utf-8文本,将其发送到一个JavaScript文件,该文件包含在发送给Servlet的URI中。Servlet查询数据库,捕获结果并将其作为XML返回给JavaScript文件,JavaScript文件将其格式化,并将格式化后的响应插入到原始网页中。

在一个web应用程序中,我遵循了一本早期Ajax书籍的指导,在构造URI时包装JavaScript。书中的例子使用了escape()方法,我发现(艰难的方法)是错误的。对于utf-8,必须使用encodeURIComponent()。

现在似乎很少有人自己编写Ajax,但我想我不妨加上这个。

为了补充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>

我认为你在自己的回答中总结得很好。

在从端到端的UTF-8-ing(?)过程中,你可能还想确保java本身使用的是UTF-8。使用-Dfile。encoding=utf-8作为JVM的参数(可以在catalina.bat中配置)。

我遇到了类似的问题,但是,在我用apache commons压缩的文件的文件名中。 所以,我用这个命令解决了它:

convmv --notest -f cp1252 -t utf8 * -r

这对我来说很有效。希望它能帮助到任何人;)