Проблема с кодировкой под Groovy - PullRequest
0 голосов
/ 10 сентября 2009

Я занимаюсь разработкой приложения, которое должно работать на разных языках (немецкий, испанский и т. Д.). Приложение использует базу данных Oracle. У меня есть бизнес-процессы CRUD, и у меня есть стандартные представления (создание, редактирование, показ, список). Нет проблем с созданием, отображением и перечислением любой записи, содержащей специальные символы как ä, ö, ü и т. д. Но когда я редактирую любую запись, содержащую любой из этих символов, я получаю закодированный версия. то есть & auml; вместо ä & ouml; вместо ö & uuml; вместо ü

и т. Д.

Любой намек, как решить эту проблему?

Спасибо!

UPDATE Спасибо за вашу помощь. Я опишу полный сценарий:

У меня есть веб-приложение, написанное в Grails (Groovy на Grails). Для разработки я использую Jetty в качестве сервера и Oracle 10g. Для тестирования и производства я использую Tomcat 6.0.18 и Oracle 10g Java версия 1.6.0_02

У меня много CRUD-процессов (создание, получение, обновление, удаление). Приложение мультиязычное. То есть, ä, ö, ü, ß, á, é, í, ó, ú буквы (символы) должны быть разрешены в качестве содержимого.

Виды написаны в gsp. Я использую стандартные представления .gsp (создать, редактировать, показать, список). Нет проблем с созданием, показом, списком. То есть, если в представлении создания я набираю любое слово, использующее эти специальные символы, тогда это будет показано или перечислено правильно под show.gsp или list.gsp

Проблема возникает при редактировании записи, содержащей такие символы. Вместо слова -let в поле появляется слово « ä » & auml; (это HTML-кодирование ä).

У меня есть следующие настройки:

под Config.groovy grails.views.gsp.encoding = "UTF-8" grails.converters.encoding = "UTF-8"

Каждая страница .gsp имеет следующий метатег:

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" pageEncoding="UTF-8"/>

Каждая форма имеет следующий атрибут:

<g:form accept-charset="UTF-8" method="post" >

Под Tomcat я сделал следующие настройки.

Tomcat запускается со следующими параметрами:

CATALINA_OPTS=-Dfile.encoding=UTF-8
JAVA_OPTS="-Duser.language=de -Duser.country=DE"

Под web.xml я установил следующий фильтр

 <filter>
   <filter-name>SetCharacterEncoding</filter-name>
   <filter-class>filters.SetCharacterEncodingFilter</filter-class>
   <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
   </init-param>
 </filter>

В myApplication / WEB-INF / classes / filters я скопировал SetCharacterEncodingFilter.class из примеров / WEB-INF / classes / filters

Под server.xml я установил следующий соединитель:

 <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="UTF-8" />

Сценарий выглядит следующим образом: Сервер получает запрос на редактирование формы. Сервер извлекает информацию из БД, а затем либо БД отправляет информация уже закодирована HTML (я так не думаю) или сервер кодирует это и отправка это закодировано клиенту.

Более того, на моем контроллере я вижу, что полученная с сервера информация не HTML кодируется.

Я не знаю, какую настройку нужно выполнить, чтобы справиться с этой проблемой кодирования. (что отнимает у меня много времени и усилий).

Заранее большое спасибо.

Луис

Ответы [ 2 ]

1 голос
/ 24 сентября 2009

Кроме того, все настройки уже сделаны. Я установил:

grails.views.default.codec="html" // none, html, base64

вместо ни одного, и проблема решена.

Моя проблема уже была выставлена ​​здесь: http://www.groovy -forum.de / read.php? 35008,5630

Для получения дополнительной информации см .:

http://jira.codehaus.org/browse/GRAILS-1827

Луис

1 голос
/ 10 сентября 2009
Кодирование

- сложная проблема, потому что вы не всегда можете доверять тому, что видите. Обычно для решения проблемы достаточно использовать utf-8. Убедитесь, что вы используете его везде - сервер oracle, клиент oracle (jdbc), файлы groovy и т. Д. Имейте в виду, что java использует utf-16. Драйвер jdbc должен сделать это преобразование для вас. Лучший совет: Java (и, следовательно, Groovy) делает именно то, что, как они говорят, делают, когда дело доходит до кодирования символов, поэтому проблемы не существует. Убедитесь, что у вас есть инструменты, которые позволяют вам проверять фактические биты (шестнадцатеричное значение) для каждого аспекта в системе. В mysql - это просто гекс: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_hex.
Я предполагаю, что у оракула есть подобная функция. Снова убедитесь, что ваш клиент настроен на использование utf-8. Я был обожжен этим раньше. Для проверки исходных файлов (или файлов журналов) используйте что-то вроде xxd или od. Если вы используете cygwin, убедитесь, что вы включили utf8 (в меню vt fonts). Если вы работаете в Windows и не используете Cygwin, вам определенно стоит попробовать его (убедитесь, что вы используете версию x).

...