【发布时间】:2018-04-21 00:22:38
【问题描述】:
我正在使用 Java/Jsp 开发一个 Web 应用程序,该应用程序在带有 Tomcat 8 的 Ubuntu 14.04 LTS 服务器上运行,其中以下 UTF-8 编码问题与节符号 § 出现。
服务器端§部分符号的任何形式输入都会被转换为§,我不知道为什么。
简单的系统输出:
Should Print [§] - [output]: §
Char: § ASCII 167
HTML/客户端没问题,因为 wireshark 跟踪显示正确的 char § 已传送到服务器。所以问题一定出在 tomcat-server 本身。
以下内容已经设置:
- 设置 JSP 编码、HTML5 编码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta charset="utf-8" />
- 设置 Java 编码
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");
- 服务器设置
- tomcat.conf Tomcat 8 设置
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"
server.xml - 在 GET 的连接器标记中(与我无关)添加“URIEncoding”属性为
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
并取消注释 web.xml 中的 UTF-8 过滤器
<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>
现在我没有想法,希望得到一些有用的提示:)
谢谢!
编辑:似乎任何 UTF-8 代码 > U+00A0 都无法正常工作
sn-p
<pre></pre>
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() 返回以下内容。也许有人有其他想法。
logger.debug("SETTINGS: " + System.getProperties() );
...
file.encoding.pkg=sun.io
javax.servlet.request.encoding=UTF-8
sun.jnu.encoding=ANSI_X3.4-1968
file.encoding=UTF-8
sun.io.unicode.encoding=UnicodeLittle
....
【问题讨论】:
-
首先尝试
\u00A7而不是§。这是为了检查编辑器和jspc编译器是否使用相同的编码(WYSInWYG)。对 .java 和 .jsp 都试试这个。不知何故,UTF-8 字节的解释不同。 -
感谢您的分析:jsp 将其正确解释为 § 和 java(tomcat) 部分 Java 打印... \u00A7: §
-
检查 .war 中的 JSP。例如,使用 maven 构建,使用复制过滤资源可能会造成严重破坏,尤其是使用必须符合 ISO-8859-1 的 .properties。
标签: java jsp tomcat encoding utf-8