代码之家  ›  专栏  ›  技术社区  ›  Luixv

groovy下的编码问题

  •  0
  • Luixv  · 技术社区  · 16 年前

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

    等等。

    有什么关于如何解决这个问题的提示吗?

    谢谢!

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

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

    我有许多CRUD进程(创建、检索、更新、删除)。 应用程序是多语言的。就是,_,_,_,_,_,_,_,_,_ 必须允许字母(字符)作为内容。

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

    当编辑包含此类字符的记录时,问题就出现了。而不是-比如说- 腐殖质 出现在anä(这是_的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编码。

    我不知道为了解决这个编码问题需要做什么设置 (这花了我很多时间和精力)。

    提前多谢。

    路易斯

    2 回复  |  直到 13 年前
        1
  •  1
  •   andersonbd1    16 年前

    编码是一个难题,因为你不能总是相信你所看到的。通常使用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版本)。

        2
  •  1
  •   Luixv    16 年前

    此外,所有的设置都已经完成了。我已经设定:

    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
    

    路易斯