2011-06-30 56 views
0

我有一個使用spring mvc的門戶網站,當門戶網站使用西班牙語和控制器時,我嘗試使用messageSource.getMessage,它將拉丁字符作爲怪異字符返回。Spring MVC messageSource西班牙文字符

MessageSource的高清應用方面:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basenames" value="classpath:messages"/> 
     <property name="defaultEncoding" value="UTF-8"/> 
</bean> 

防守控制器:

messageSource.getMessage("messagekey", null, request.getLocale()); 

這似乎是:

@Autowired 
    public void setMessageSource(MessageSource messageSource) { 
     this.messageSource = messageSource; 
    } 

當我嘗試它返回的怪異字符以下它忽略了UTF-8編碼。有任何想法嗎?

回答

2

在閱讀完本文後,找到解決我問題的方法 - >http://forum.springsource.org/showthread.php?64002-UTF-8-encoding-in-Spring-MVC-Portlet,並進行進一步的故障排除。

服務資源和使用ajax時發生這種情況。我通過在ResourceResponse上將字符編碼設置爲UTF-8解決了該問題,它似乎默認爲ISO-8859-1。

您可以使用以下方法之一:

response.setContentType("text/html"); 
response.setCharacterEncoding("UTF-8"); 

response.setContentType("text/html;charset=UTF-8"); 
+0

我正在使用Spring安全性。如果用戶已登錄(但未完全通過身份驗證,因爲他們的登錄不是最近的)並嘗試訪問我設置爲需要完整身份驗證的帳戶頁面,那麼我的「access-denied-page =」/ login?重新授權= true「'設置將它們彈回到登錄控制器。但登錄視圖顯示?而不是中文字符。除了這個時髦的403情況外,UTF-8在我的網站中都可以使用。我不知道爲什麼我需要在我的LoginController(而不是其他控制器)中指定'response.setCharacterEncoding(「UTF-8」);'但是解決了它。 – Ryan

1

檢查您的messages_es.properties文件的編碼。它也必須是UTF-8。

+0

是屬性文件的編碼是UTF-8。 – Carlos

+0

Java中的屬性文件應始終採用ISO 8859-1字符編碼。 「在這種編碼中不能直接表示的字符可以使用Unicode轉義符寫入[skip] native2ascii工具可用於將屬性文件轉換爲其他字符編碼和從其他字符編碼轉換。」請參閱http://download.oracle.com/javase/6/docs/api/java/util/Properties.html –

0

索裏我糟糕的英語水平。我有類似的問題。 當您嘗試從消息源讀取文件時,JVM環境也使用UTF8編碼很重要。換句話說,定義VM選項:-Dfile.encoding = UTF8

這可以解決任何嘗試從文件系統的文件中讀取的嘗試的編碼問題。也許它會幫助某人:)

+0

爲解決問題的原因提供了一些解釋 – Blip