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

等等。

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

谢谢!

UPDATE 谢谢你的帮助。我将描述完整的场景:

我有一个用grails写的Web应用程序(在grails上groovy)。 为了开发我使用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 = QUOT; UTF-8英寸     grails.converters.encoding = QUOT; 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编码。

我不知道为了应对这种编码问题必须进行哪种设置 (这花了我很多,很多时间和精力)。

提前多多感谢。

路易斯

有帮助吗?

解决方案 2

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

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

路易斯

其他提示

编码是一个棘手的问题,因为你不能总是相信你所看到的。通常使用utf-8足以解决问题。确保你到处都在使用它 - oracle服务器,oracle客户端(jdbc),groovy文件等。请注意java使用utf-16。 jdbc驱动程序应该为您执行此转换。给出的最好的建议是java(因此groovy)完全按照他们的说法进行字符编码,所以问题不在那里。确保您有工具可以检查系统中每个方面的实际位(十六进制值)。在mysql中 - 它只是十六进制: http://dev.mysql.com/doc/ refman / 5.0 / EN /串functions.html#function_hex 。结果 我认为oracle具有类似的功能。再次确保您的客户端配置为使用utf-8。我之前被那个烧了。要检查源文件(或日志文件),请使用xxd或od之类的内容。如果您正在使用cygwin,请确保打开utf8(在vt字体菜单中)。如果你在Windows上并且没有使用cygwin,那么你一定要把它旋转(确保使用x版本)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top