Java 其中Â;(C2)来自
出于某种原因,一段代码将空格替换为Java 其中Â;(C2)来自,java,jsp,url,Java,Jsp,Url,出于某种原因,一段代码将空格替换为\u00A0-即a。然后使用此代码清理URL(是的,我知道这非常糟糕——在许多方面)。奇怪的是,当这些代码显示在我的测试jsp中时,一个流氓出现了-为什么 示例JSP演示该问题 <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-
\u00A0
-即a。然后使用此代码清理URL(是的,我知道这非常糟糕——在许多方面)。奇怪的是,当这些代码显示在我的测试jsp中时,一个流氓出现了-为什么
示例JSP演示该问题
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<%
String[] parameters = request.getParameterValues("p");
if (parameters == null || parameters.length == 0) {
parameters = new String[]{""};
}
%>
</head>
<body>
<h1>Hello World!</h1>
<a href='index.jsp?p=<%="Hello\u00A0there"%>'>A Link</a>
<p><%=parameters[0]%></p>
</body>
</html>
JSP页面
你好,世界!
为什么参数显示为Hello
?c2
从哪里来
已添加
顺便说一句:参数的十六进制是48 65 6c 6c 6f c2 a0 74 68 65 72 65
,显示c2
原位。Rogue的出现通常表示某些内容使用UTF-8编码,然后使用“传统”代码页字符集(如ISO-8859-1或CP850)再次解码,或者…要回答实际问题“C2从何而来?”,您可以找到
非中断空间0x00A0
在UTF-16中编码为0xC2A0
在UTF-8中
这可能也有帮助
编码的Unicode字符示例(十六进制表示法)
16位Unicode UTF-8序列
0001 01
007F 7F
0080 C2 80那么在我的例子中,我应该使用getParameterValues
的什么替代方法呢?@OldCurmudgeon,告诉你的容器正确地从字节解码为字符。在Tomcat中,在server.xml
中使用URIEncoding
参数。就这样!!将
添加到我的glassfishweb.xml
文件中修复了该问题。
16-bit Unicode UTF-8 Sequence
0001 01
007F 7F
0080 C2 80 <-- this was the case of nbsp
07FF DF BF
0800 E0 A0 80
FFFF EF BF BF
010000 F0 90 80 80
10FFFF F4 8F BF BF