2012-12-23 139 views
1

我們有一個基於Spring MVC的多語言Web應用程序。我們已經設置在web.xml中CharacterEncodingFilter如下面提到字符編碼過濾器,韓文字符編碼問題

<filter> 
     <filter-name>SetCharacterEncodingFilter</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>SetCharacterEncodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

與這些配置如預期的應用程序工作正常。

當我們通過從JSP這個韓文字符「직원의상세미니」,在我們的業務層,我們發現這個人物得到編碼爲「ì§ìììì¸ë¯¸ë」

我們查詢的功能與所接收的所有者名稱JDBC的metadata得到內的可用的表下面

ResultSet resultSetTables = dbMetadata.getTables(owner,owner, "%", tableTypes); 

1)此函數

ResultSet resultSetTables = dbMetadata.getTables("직원의상세미니","직원의상세미니", "%", tableTypes); 

返回7代表如所提模式「직원의상세미니」

其中當與經編碼的字符串「ì§ìììì¸ë¯¸ë」相同的模式下

ResultSet resultSetTables = dbMetadata.getTables("ì§ìììì¸ë¯¸ë","ì§ìììì¸ë¯¸ë", "%", tableTypes); 

返回可用0表「運行직원의下提供상세미니」。

+0

你使用的是什麼Web容器?當你說「通過」是通過GET?容器中的URI編碼是開始檢查的好候選者。如果這一切都很好,那麼我們可以檢查堆棧的其他部分。 – opensourcegeek

+0

我們使用的是tomcat webcontainer,並且從請求中收到的請求參數是「ì§ìììì¸ë¸¸ëë」「 – sathishs

回答

1

我認爲Tomcat是您的問題,您的URI編碼可能默認爲HTTP連接器中的ISO-8859-1。

http://tomcat.apache.org/tomcat-5.5-doc/config/http.html,您可能需要設置的URIEncoding爲UTF-8,看有沒有什麼幫助。

我趕緊試了蟒蛇控制檯上,如果我用你提供的iso-8859-1的字符串,我得到了相同的亂碼爲您發佈。

>>> a = '직원의상세미니' 
>>> print a.decode("iso-8859-1") 
ì§ìììì¸ë¯¸ë 
+0

你解決了這個問題,我之前已經有了URIEncoding =」UTF-8「,但添加了useBodyEncodingForURI =」true 「在server.xml的連接器中解決了這個問題。非常感謝 :) – sathishs