Â(C2)来自何处

时间:2016-02-25 09:17:50

标签: java jsp url

由于某种原因,一段代码用\u00A0替换空格 - 即Non-breaking space。然后,此代码用于清理一个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>

为什么参数显示为Hello therec2来自哪里?

顺便说一句:parameter的十六进制是48 65 6c 6c 6f c2 a0 74 68 65 72 65,显示c2原位。

2 个答案:

答案 0 :(得分:2)

出现Rogue通常表示使用UTF-8编码某些内容,然后使用“传统”代码页字符集再次解码。 ISO-8859-1,或CP850,或......

答案 1 :(得分:1)

要回答实际问题“哪里(C2)来自?”,您可能会发现this article helpful
UTF-16 中的不间断空格0x00A0 UTF-8 中编码为0xC2A0

table也可能有所帮助

  

编码的Unicode字符示例(十六进制表示法)

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