2012-08-10 61 views
0

我已經有了一個Grails(2.0.4)應用程序,所有這些應用程序都設置爲管理UTF-8編碼(佈局中的元標記,mysql數據庫表)。不幸的是,發生了一些奇怪的事Grails將從GSP到控制器的非英國字符編碼

例如,如果在一個形式(以創建一個域實例)I型含非英國字符的文本,例如:

más que nada

的POST包含準確的文本(帶有「 」字符爲是),但在控制器中的PARAMS變量包含了錯誤的文字:

más que nada

有視圖和控制器之間什麼都沒有,怎麼能這樣呢?

我也試過,沒有很好的效果,在Config.groovy中設置:

grails.views.default.codec = "html" 

有別的我失蹤設置?

在此先感謝大家花時間看看這個問題。

回答

0

對不起,我想通了什麼問題了天前,但我沒有時間來回答我的問題到現在。

可惜我忘了提問題的一個關鍵部分,因爲我不認爲這是相關的。我只在AJAX調用中遇到了編碼問題,而我沒有提到它,因爲我的應用程序中的所有節省都是通過AJAX完成的。

因此,編碼問題涉及到的內容類型jQuery的崗位,這(與UTF-8正常工作)的配置已經是這樣的:

contentType: "application/x-www-form-urlencoded;charset=UTF-8" 
0

在督促我在server.xml中配置的tomcat我作爲6
<Connector port="14080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="14443" URIEncoding="UTF-8"/>
最重要的行是URIEncoding="UTF-8"

+0

如何配置它進入Grails應用程序?對於我的開發環境,我在IDE中運行應用程序,並且沒有任何server.xml來設置。 – lucke84 2012-08-10 15:49:00

+0

試試這個(http://roshandawrani.wordpress.com/2011/03/13/grails-tip-configuring-embedded-tomcat-instance-used-in-developmenttest-env/),讓我知道 – 2012-08-10 16:37:27

0

什麼是你的MySQL數據庫的默認字符集?可以嗎?

這是我創造我的MySQL數據庫:

create database [dbname] DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE utf8_swedish_ci; 

看到http://dev.mysql.com/doc/refman/5.5/en/create-database.html爲CREATE DATABASE

整理會影響排序的完整語法。您可以在mysql中使用「show collat​​ion」sql語句獲得一個列表。 http://dev.mysql.com/doc/refman/5.1/en/show-collation.html

更改現有表的編碼與此命令來完成:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]; 

你可以用「顯示創建表tbl_name」命令檢查現有表的編碼。更改數據庫的默認編碼不會更改現有表(或從mysql轉儲中導入的表)的編碼。

+0

Woops,我應該已經讀過你的問題,它甚至沒有來到控制器... – 2012-08-10 15:54:04

+0

沒問題的人。想再試一次嗎? :) – lucke84 2012-08-10 16:23:16

0

你已經與

${myHtmlContent.encodeAsHtml()} 
在您看來

試試?

+0

我還沒有編碼的價值,想象一個空的輸入文本提交或textarea,填寫並通過表單POST發送到控制器。 – lucke84 2012-08-10 16:53:18

1

如何將這些值在Config.groovy中:

grails.views.default.codec = "none" 
grails.views.gsp.encoding = "UTF-8" 
grails.converters.encoding = "UTF-8" 

是那些配置是否正確?

+0

是的,這些設置與我的完全一樣。 – lucke84 2012-08-13 08:48:52

+0

什麼版本的Grails? – 2012-08-13 12:11:23

+0

該版本是2.0.4 – lucke84 2012-08-13 12:54:14

0

那麼這個帖子是幾個月前,OP可能會找到一個更好的解決方案。但是,我已經管理的這個問題的另一種解決方案是顯式更改所關注參數的字符編碼。

例如,params.paramsname = new String(params.unicodeInput.getBytes("8859_1"), "UTF8");

這將迫使paramsname被正確解碼爲Unicode字符。

我剛剛遇到了這個問題,只是爲了提醒你,這只是一個解決方法。我仍然在尋找更好的解決方案。 cheerzzz!