0

我正在开发一个可以在不同语言(德语、西班牙语等)下工作的应用程序。该应用程序使用 Oracle DB。我有 CRUD 业务流程和标准视图(创建、编辑、显示、列表)。创建、显示和列出任何包含特殊字符(如 ä、ö、ü 等)的记录都没有问题。但是当我编辑任何包含这些字符的条目时,我得到的是编码版本。即ä 而不是 ä & ouml; 而不是 ö & uuml; 而不是ü

等等。

任何提示如何解决这个问题?

谢谢!

更新感谢您的帮助。我将描述完整的场景:

我有一个用 grails (groovy on grails) 编写的 Web 应用程序。对于开发,我使用 Jetty 作为服务器和 Oracle 10g。对于测试和生产,我使用的是 Tomcat 6.0.18,Oracle 10g Java 版本是 1.6.0_02

我有许多 CRUD 进程(创建、检索、更新、删除)。该应用程序是多语言的。即必须允许ä、ö、ü、ß、á、é、í、ó、ú 字母(字符)作为内容。

视图是用 gsp 编写的。我正在使用标准的 .gsp 视图(创建、编辑、显示、列表)。创建,显示,列表没有问题。也就是说,如果在创建视图下我使用此特殊字符键入任何单词,那么这将在 show.gsp 或 list.gsp 下正确显示或列出

编辑包含此类字符的记录时会出现问题。而不是 - 让我们说 - ä出现在字段中一个 & 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 下,我从 examples/WEB-INF/classes/filters 复制了 SetCharacterEncodingFilter.class

在 server.xml 下,我设置了以下连接器:

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

场景如下: 服务器接收到编辑表单的请求。服务器正在从数据库中检索信息,然后数据库正在发送已经 html 编码的信息(我不这么认为),或者服务器正在对其进行编码并将其编码发送给客户端。

此外,在我的控制器上,我可以看到从服务器检索到的信息不是 html 编码的。

我不知道必须进行哪个设置才能解决这个编码问题(这花了我很多时间和精力)。

提前非常感谢。

路易斯

4

2 回答 2

1

编码是一个棘手的问题,因为你不能总是相信你所看到的。通常使用 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
我假设oracle具有类似的功能。再次确保您的客户端配置为使用 utf-8。我之前被那个烫伤了。要检查源文件(或日志文件),请使用 xxd 或 od 之类的东西。如果您使用的是 cygwin,请确保打开 utf8(在 vt 字体菜单中)。如果您在 Windows 上并且不使用 cygwin,那么您绝对应该试一试(确保您使用的是 x 版本)。

于 2009-09-10T16:12:04.290 回答
1

除了已经完成的所有设置。我已经设置:

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

而不是没有,问题就解决了。

我的问题已经暴露在这里:http ://www.groovy-forum.de/read.php?3,5008,5630

有关更多信息,请参阅:

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

路易斯

于 2009-09-24T06:15:17.033 回答