由于某种原因,一段代码用\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 there
? c2
来自哪里?
加
顺便说一句:parameter
的十六进制是48 65 6c 6c 6f c2 a0 74 68 65 72 65
,显示c2
原位。
答案 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