我正在开发一个应该在不同语言(德语,西班牙语等)下工作的应用程序。该应用程序使用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 = “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编码。
我不知道为了应对这种编码问题必须进行哪种设置 (这花了我很多,很多时间和精力)。
提前多多感谢。
路易斯
答案 0 :(得分: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版本)。
答案 1 :(得分: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
路易斯