我需要得到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。
如何做到这一点?
当前回答
如果你已经指定了连接池(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-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");
之前的回答对我的问题不起作用。它只在生产环境中使用tomcat和apache mod_proxy_ajp。Post body丢失非ascii字符由? 问题最终出现在JVM defaultCharset(默认安装中的US-ASCII: Charset dfset = Charset.defaultCharset();) 所以,解决方案是运行tomcat服务器和一个修饰符,以UTF-8作为默认字符集运行JVM:
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
(将这一行添加到catalina.sh和service tomcat restart)
也许你还必须改变linux系统变量(编辑~/。Bashrc和~/。永久更改的配置文件,请参见https://perlgeek.de/en/article/set-up-a-clean-utf8-environment)
出口LC_ALL = en_US。utf - 8 出口LANG = en_US。utf - 8 出口的语言= en_US。utf - 8
我遇到了类似的问题,但是,在我用apache commons压缩的文件的文件名中。 所以,我用这个命令解决了它:
convmv --notest -f cp1252 -t utf8 * -r
这对我来说很有效。希望它能帮助到任何人;)
关于@kosoant回答....中提到的CharsetFilter
在tomcat web.xml中有一个内置的Filter(位于conf/web.xml)。过滤器名为setCharacterEncodingFilter,默认情况下是注释的。你可以取消注释(请记住取消注释它的过滤器映射)
此外,不需要在web.xml中设置jsp-config(我已经为Tomcat 7+测试了它)
我认为你在自己的回答中总结得很好。
在从端到端的UTF-8-ing(?)过程中,你可能还想确保java本身使用的是UTF-8。使用-Dfile。encoding=utf-8作为JVM的参数(可以在catalina.bat中配置)。