2010-09-23 190 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>