【问题标题】:Must use UTF-16 Url encoding to submit a search in Java. How can I?必须使用 UTF-16 Url 编码以 Java 提交搜索。我怎样才能?
【发布时间】:2011-09-07 05:03:25
【问题描述】:

某个站点(不受我控制)有一个内部搜索引擎,它使用如下所示的 GET 请求:something.com/search?query=%u0001%0101,我想在我的 Java 代码中使用它。

据我了解,这是一种不太常见的 URL 编码方式 (UTF-16)。我尝试将 HttpURLConnection 与上述类型的 Url 一起使用,但这会给我一个 java.net.URISyntaxException Malformed escape pair at index X(X 是 %u0001 的位置)。

我能做什么?我对这些 url 编码问题很陌生,所以任何建议都将受到高度赞赏。

【问题讨论】:

  • 也许你必须双重编码?首先是 UTF-16,然后是 URL 编码?
  • 不确定你的意思,但也许这会澄清:首先我将 unicode 字符编码为 ASCII 以匹配站点的语法(假的,例如 %$# -> %u0000%u0002%u0500),然后我从它们创建一个 URL,并尝试打开一个连接。所以我的代码是这样的: Url("something.com/search?query=%u0000%u0002%u0500").openConnection();
  • 对于我的具体情况,the answer here 解决了这个问题。虽然我没有尝试过,但我的搜索得出的结论是@McDowell 有一个正确且更通用的方法。

标签: java url-encoding utf-16


【解决方案1】:

something.com/search?query=%u0001%0101 的形式违反了 URI 规范,因为百分比字符是为 percent-encoding 保留的。根据此规则,百分比符号后面必须跟两个十六进制数字。这不是有效的 UTF-16 编码 URI。

在这些地址上抛出错误并不奇怪。

您可能不得不求助于打开socket 并发送您自己的格式错误的client request

GET /search?query=%u0001%0101 HTTP/1.1
Host: something.com

【讨论】:

  • 谢谢!我想你是对的,如果我没有发现另一种在我的情况下“意外”起作用的方式......(最终回答了我自己的问题)
【解决方案2】:

【讨论】:

  • 谢谢。我认为这种方法编码为与我正在寻找的不同的格式。它创建:%00%01 ASCII,而不是我尝试使用的站点需要的 %u0001 格式。
  • @DannyA 你在编码什么字符串,你希望它之后会是什么样子?
  • 字符串可以是我想搜索的任何内容(例如“דני”),我需要的结果是上述格式的内容(例如,本例中的“%u05D3%u05E0%u05D9”)。但是 unicode 的特定 ASCII 格式问题不大(我可以稍微玩一下字符)。据我了解,问题在于具有此 (%uXXXX) 编码的 URL 被 java 的库视为格式错误。
猜你喜欢
  • 1970-01-01
  • 2014-05-11
  • 2023-01-25
  • 1970-01-01
  • 2011-04-21
  • 2020-11-27
  • 2014-11-13
  • 2015-02-05
  • 2017-02-03
相关资源
最近更新 更多