【问题标题】:Character encoding filter, Korean characters encoding issues字符编码过滤器,韩文字符编码问题
【发布时间】:2012-12-23 09:26:07
【问题描述】:

我们有一个基于 Spring MVC 的多语言 Web 应用程序。我们在 web.xml 中设置了 CharacterEncodingFilter,如下所述

<filter>
        <filter-name>SetCharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>SetCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

通过这些配置,应用程序可以正常工作。

当我们从 jsp "직원의상세미니" 传递这个韩国字符时,在我们的服务层中,我们发现这个字符被编码为 "ì§ìììì¸ë¯¸ë"

我们有一个使用接收到的所有者名称查询 jdbc 元数据的功能,以获取其中可用的表,如下所述

ResultSet resultSetTables = dbMetadata.getTables(owner,owner, "%", tableTypes);

1) 这个函数

ResultSet resultSetTables = dbMetadata.getTables("직원의상세미니","직원의상세미니", "%", tableTypes); 

返回模式“직원의상세미니”下的 7 个可用表

使用编码字符串“ì§ìììì¸ë¯¸ë”运行时的位置

ResultSet resultSetTables = dbMetadata.getTables("ì§ìììì¸ë¯¸ë","ì§ìììì¸ë¯¸ë", "%", tableTypes); 

返回 0 个在同一模式“직원의상세미니”下可用的表。

【问题讨论】:

  • 您使用的是什么网络容器?当您说“通过”时,是通过 GET 吗?容器中的 URI 编码是一个很好的检查对象。如果一切顺利,那么我们可以检查堆栈的其他部分。
  • 我们使用的是tomcat webcontainer,从请求中收到的请求参数是“ì§ìììì¸ë¯¸ë”

标签: java jakarta-ee spring-mvc character-encoding


【解决方案1】:

我认为 Tomcat 是您的问题,您的 URI 编码可能在 HTTP 连接器中默认为 ISO-8859-1。

http://tomcat.apache.org/tomcat-5.5-doc/config/http.html,您可能需要将 URIEncoding 设置为 UTF-8,看看是否有帮助。

我在 python 控制台上快速尝试,如果我使用您提供的 iso-8859-1 字符串,我会得到与您发布的相同的乱码。

>>> a = '직원의상세미니'
>>> print a.decode("iso-8859-1")
ì§ìììì¸ë¯¸ë

【讨论】:

  • 你解决了这个问题,我之前已经有 URIEncoding="UTF-8" 但是在 server.xml 的连接器中添加 useBodyEncodingForURI="true" 解决了这个问题。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 2012-02-27
  • 2013-04-21
相关资源
最近更新 更多