【问题标题】:Where is the  (C2) coming from(C2) 来自哪里
【发布时间】:2016-02-25 09:17:49
【问题描述】:

由于某种原因,一段代码将空格替换为 \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

【问题讨论】:

  • 我在将内容从 Gmail 复制到纯文本文件时得到了这些。我一次又一次地忘记了你不能这样做,gmail 会弄乱你的明文副本。

标签: java jsp url


【解决方案1】:

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

【讨论】:

  • 那么在我的情况下,我应该使用getParameterValues 的哪个替代品?
  • @OldCurmudgeon,告诉你的容器正确地从字节解码为字符。在 Tomcat 中,在 server.xml 中使用 URIEncoding 参数。
  • 就是这样!!将&lt;parameter-encoding default-charset="UTF-8"/&gt; 添加到我的glassfish-web.xml 文件可解决此问题。
【解决方案2】:

要回答实际问题“(C2) 来自哪里?”,您可以找到this article helpful
UTF-16 中的不间断空格 0x00A0UTF-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

【讨论】:

    猜你喜欢
    • 2010-09-21
    • 2014-04-24
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多