Ubuntu / Tomcat服务器UTF-8编码问题

时间:2017-11-08 10:43:58

标签: java jsp tomcat encoding utf-8

我使用在带有Tomcat 8的Ubuntu 14.04 LTS服务器上运行的Java / Jsp开发了一个Web应用程序,其中带有以下UTF-8编码问题的部分符号§出现。

任何形式服务器端的部分符号§的输入将转换为§,我不知道为什么。

简单的sysout:

Should Print [§] - [output]: §
Char: § ASCII 167

HTML / Client端正常,因为wireshark跟踪显示正确的char§被传递到服务器。所以问题必须在tomcat-server本身。

已经设置了以下内容:

  1. 设置JSP编码,HTML5编码
  2. &lt%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        &ltmeta charset="utf-8" />
    

    1. 设置Java编码
    2. protected void doPost(HttpServletRequest request, HttpServletResponse 
      response)
          throws ServletException, IOException {
          // Set CharSet to UTF-8
          response.setContentType("text/html; charset=UTF-8");
          response.setCharacterEncoding("UTF-8");
          request.setCharacterEncoding("UTF-8");
      

      1. Serversettings
      2. env JAVA_OPTS="-Djava.awt.headless=true -
            Djava.security.egd=file:/dev/./urandom -
        Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8"
            env CATALINA_OPTS="-Xms512M -Xmx1024M -server -XX:+UseParallelGC -
        Dfile.encoding=UTF-8"
        

        1. tomcat.conf Tomcat 8设置
        2. 
          
              <Connector port="8080" protocol="HTTP/1.1" 
                         connectionTimeout="20000" 
                         redirectPort="8443" URIEncoding="UTF-8"/>
          
          

          server.xml - 在GET的Connector标签中(与我不相关),将“URIEncoding”属性添加为

          
          
              <filter>
                  <filter-name>setCharacterEncodingFilter</filter-name>
                  <filter-
              class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
                  <init-param>
                      encoding</param-name>
                      UTF-8</param-value>
                  </init-param>
                  <async-supported>true</async-supported>
              </filter>
          
          

          并取消注释web.xml中的UTF-8过滤器

              locale -a 
                  C
                  C.UTF-8
                  en_US.utf8
                  POSIX
          

          现在我没有想法,希望得到一些有用的提示:)

          谢谢!

          编辑:似乎任何UTF-8代码&gt; U + 00A0无法正常工作 片段

          
          
          
          U+00A1  ¡   c2 a1   INVERTED EXCLAMATION MARK
          U+00A2  ¢   c2 a2   CENT SIGN
          U+00A3  £   c2 a3   POUND SIGN
          U+00A4  ¤   c2 a4   CURRENCY SIGN
          ...
          
          Sysout: ¡ ¢ ã ä...
          

          编辑:

          我已经尝试过任何我发现但仍无法正常工作的内容:System.properties()返回以下内容。也许有人有另一个想法。

          U+00A1 ¡ c2 a1 INVERTED EXCLAMATION MARK U+00A2 ¢ c2 a2 CENT SIGN U+00A3 £ c2 a3 POUND SIGN U+00A4 ¤ c2 a4 CURRENCY SIGN ... Sysout: ¡ ¢ ã ä...

1 个答案:

答案 0 :(得分:0)

在jsp的顶部:

<%@page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
%><!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">

(恐怕已经是这种情况了。)在浏览器中检查页面编码和HTML源文本。