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