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

我的设置如下:

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

使用数据库:MySQL 5.x

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

如何做到这一点?


当前回答

之前的回答对我的问题不起作用。它只在生产环境中使用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

其他回答

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

启动变量>高级>

并设置Def. char set:utf8

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

当我们想要使用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

为我和尼克,所以我们永远不会忘记,浪费时间.....

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

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

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

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

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

我还想从这里添加这部分解决了我的utf问题:

runtime.encoding=<encoding>