2010-09-23 125 views
0

我有一个与unicode文本字符串在其中的MySQL数据库。我的JSF应用程序(在tomcat 6上运行)可以读取这些unicode字符串并在浏览器中正确显示它们。所有的html字符集都设置为UTF-8。Unicode字符正在保存不正确

当我保存我的对象时,即使没有做任何更改,Hibernate也会将其保留回数据库。如果我现在直接看数据库,我发现带有重音的字符变成了垃圾。

我的数据库连接字符串是:

 <property name="hibernate.connection.url" 
        value="jdbc:mysql://database.address.com/dbname?autoReconnect=true&#38;zeroDateTimeBehavior=convertToNull&#38;useUnicode=true&#38;characterEncoding=utf8"/> 

改变这种对的characterEncoding,而不是UTF8 UTF-8没有什么区别。

事实上,它确实在工作日前,但现在不是,我不知道要检查什么。你有什么建议吗?我可以提供任何被认为相关的更多信息。

回答

1

一些选项来解决,我想起:

  • 如果使用小面,指定<?xml version="1.0" encoding="UTF-8"?>页面使用JSP
  • 如果顶部,指定<%@ page pageEncoding="utf-8" %>
  • 如果这样做不工作,做一个过滤器映射到面servlet,并且是否request.setCharacterEncoding("utf-8")
0

我有和你一样的问题,但与PostgreSQL。您可以使用过滤器如下。它为我工作。我认为,它必须是更好的解决方案,但我还没有找到:/

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 

public class UnicodeFilter implements Filter { 

    @Override 
    public void destroy() {} 

    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     // Set the characterencoding for the request and response streams. 
     req.setCharacterEncoding("UTF-8"); 
     res.setContentType("text/html; charset=UTF-8");   
     chain.doFilter(req, res);  
    } 

    @Override 
    public void init(FilterConfig arg0) throws ServletException {} 

} 

在web.xml:

<filter> 
     <filter-name>utffilter</filter-name> 
     <filter-class>utils.UnicodeFilter</filter-class> 
</filter> 
<filter-mapping> 
     <filter-name>utffilter</filter-name> 
     <url-pattern>/*</url-pattern> 
</filter-mapping> 
+1

删除'res.setContentType()',它只是多好不好。 bozho已经建议'req.setCharacterEncoding()'。有关更多详细信息和解决方案,请参阅[本文](http://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.html)。 – BalusC 2010-12-02 18:08:44

0

Spring一个简单的解决方案,我发现的是CharacterEncodingFilter

<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> 
</filter> 
<filter-mapping> 
    <filter-name>encoding-filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+1

这基本上只是'request.setCharacterEncoding(“UTF-8”)',没有更多。 – BalusC 2010-12-10 11:03:26

0

确保UTF-8编码的页面,因此某些字符显示 并正确提交...

此过滤器添加到web.xml中。

<filter> 
    <filter-name>encodingFilter</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>true</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>encodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping>