0

标题几乎概括了它。

我需要设置一个查询参数,"C\u9999"其最终应为%22C\u9999%22. 我最接近的是在 URLEncoder 咀嚼它之后结束的"C\\u9999"%22C%25%5Cu9999%22

编辑

我正在尝试对 couchdb 进行 Web 服务调用,我在其中设置 url,contract?startkey="C"&endkey="C\u9999"以便我可以进行部分键匹配。当我在浏览器中输入它时,一切正常,我可以在 CouchDB 的日志中看到请求 url 是contract?startkey="C"&endkey="C\u9999". 我正在尝试以编程方式复制它。

4

1 回答 1

0

Unicode 转义(\u9999 部分)是 Java 字符串中单字符表示的一种方法。它们允许您输入文本编辑器可能不支持的某些 Unicode 字符(例如,当您使用不支持 UTF-8 的文本编辑器时)。

URLs / URIs 不使用相同的字符表示方案。他们使用一系列 %xy 转义序列,而不是\uXXXX转义序列,因此您的字符串将始终在不保留 \u unicode 转义序列的情况下出现,并且永远不会出现,%22C\u9999%22因为该\u9999部分不能是有效 URL 的一部分。

当您选择编码时,\\u9999您并没有编码单个 Unicode 字符,因为您已经对首字母进行了双重转义,\这意味着您实际上编码了六个字符,而不是一个、一个\字符、一个u字符和四个9字符。

在任何情况下,实际使用支持 UTF-8 的编辑器几乎总是更好,并找出在不使用 Java Unicode 转义值的情况下实际输入相关字符的方法。它也将扩展为缺少 Java 字符串特定转义序列的内容,因为 URL 不是根据 Java 字符串的确切编码规则构造的。但是,通过使用支持 UTF-8 的编辑器,您不会觉得\u9999应该保留 UTF-8。因为,该表示首先不会出现在初始字符串中(实际的 unicode 字符将在那里)。

于 2013-01-07T13:50:08.877 回答