我使用在带有Tomcat 8的Ubuntu 14.04 LTS服务器上运行的Java / Jsp开发了一个Web应用程序,其中带有以下UTF-8编码问题的部分符号§出现。
任何形式服务器端的部分符号§的输入将转换为§,我不知道为什么。
简单的sysout:
Should Print [§] - [output]: § Char: § ASCII 167
HTML / Client端正常,因为wireshark跟踪显示正确的char§被传递到服务器。所以问题必须在tomcat-server本身。
已经设置了以下内容:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta charset="utf-8" />
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");
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"
<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: ¡ ¢ ã ä...
答案 0 :(得分:0)
在jsp的顶部:
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
%><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
(恐怕已经是这种情况了。)在浏览器中检查页面编码和HTML源文本。