【问题标题】:How to set Tomcat's Encoding type?如何设置Tomcat的编码类型?
【发布时间】:2016-06-06 14:31:00
【问题描述】:

其实我不确定是不是Tomcat的问题。我不得不处理一些中文(UTF-8编码)。当我在eclipse上用“Run on server”调试程序时,它会返回预期的结果。但是当我将它导出到war包并在tomcat上运行时,所有中文都会显示在GBK中,并且无法读取。我不知道问题出在哪里。谁能告诉我如何解决它?

【问题讨论】:

  • 不是把Tomcat设置成任何字符编码那么简单。您的 webapp 必须以这样一种方式编写,即使用适当的字符编码读取和写入文本。您可能在您的 web 应用程序的某个地方依赖默认的 char 编码而不是明确指定它。不同操作系统上的默认字符编码不同(例如 Windows 上的 Cp1252,Linux 上的 UTF-8),因此您的 web 应用程序在不同平台上的行为可能会有所不同。

标签: java eclipse tomcat7


【解决方案1】:

您需要做几处更改以使 UTF-8 作为您的默认编码字符:

  • 在 server.xml 中的连接器上设置 URIEncoding="UTF-8"。
  • 使用默认编码设置为 UTF-8 的字符编码过滤器
  • 更改所有 JSP 以在其 contentType 中包含字符集名称。 例如,将<%@page contentType="text/html; charset=UTF-8" %> 用于通常的 JSP 页面,将<jsp:directive.page contentType="text/html; charset=UTF-8" /> 用于 XML 语法(也称为 JSP 文档)的页面。
  • 更改所有 servlet 以设置响应的内容类型并将内容类型中的字符集名称包括为 UTF-8。 使用response.setContentType("text/html; charset=UTF-8")response.setCharacterEncoding("UTF-8")
  • 将您使用的任何内容生成库(Velocity、Freemarker 等)更改为使用 UTF-8 并在它们生成的响应的内容类型中指定 UTF-8
  • 在您的字符编码过滤器或 jsp 页面有机会将编码设置为 UTF-8 之前,禁用任何可能读取请求参数的阀或过滤器。

欲了解更多信息,请参阅this

【讨论】:

    【解决方案2】:

    除了elkorchi的回答,你还需要在web.xml中添加过滤器

    <filter>
        <filter-name>charsetFilter</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>
    </filter>
    <filter-mapping>
        <filter-name>charsetFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    如果您使用 spring 框架,上述方法有效,否则您需要像这样编写自己的过滤器并相应地更改 xml 配置中的类,

    详情见博客:enter link description here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多