1

我正在为我的所有 Web 访问使用 apache http 客户端 4。这意味着我需要执行的每个查询都必须通过 URI 语法检查。我尝试访问的网站之一使用 UNICODE 作为 url GET 参数编码,即:

http://maya.tase.co.il/bursa/index.asp?http://maya.tase.co.il/bursa/index.asp?view=search&company_group=147&srh_txt=%u05E0%u05D9%u05D1&arg_comp=&srh_from =2009-06-01&srh_until=2010-02-16&srh_anaf=-1&srh_event=9999&is_urgent=0&srh_company_press=

(参数“srh_txt=%u05E0%u05D9%u05D1”在 UNICODE 中编码 srh_txt=ניב)

问题是 URI 不支持 UNICODE 编码(它只支持 UTF-8)这里真正的大问题是,这个网站希望它的参数以 UNICODE 编码,所以任何尝试使用 String.format( " http://...srh_txt=%s& ...",URLEncoder.encode( "ניב" , "UTF8")) 生成一个合法的 url,可用于构造 URI,但站点响应它带有错误消息,因为它不是它期望的编码。

顺便说一句,可以创建 URL 对象,甚至可以使用未转换的 url 连接到网站。有没有办法以非 UTF-8 编码创建 URI?有没有办法使用常规 URL(而不是 URI)使用 apache httpclient 4?

谢谢,尼夫

4

1 回答 1

1

(参数“srh_txt=%u05E0%u05D9%u05D1”在 UNICODE 中编码 srh_txt=ניב)

它不是真的。这不是 URL 编码,并且 URL 中的%u序列无效

%u05E0%u05D9%u05D1"ניב仅以 JavaScript 的古怪escape语法进行编码。escape与除 之外的所有 ASCII 字符的 URL 编码相同+,但%u####它为 Unicode 字符生成的转义完全是它自己发明的。

(一般来说,不应该使用escape.encodeURIComponent而是使用会产生正确的 URL 编码的 UTF-8,ניב= %D7%A0%D7%99%D7%91。)

如果一个站点在其查询字符串中需要 %u####序列,那么它就被严重破坏了。

有没有办法以非 UTF-8 编码创建 URI?

是的,URI 可以使用您喜欢的任何字符编码。它通常是 UTF-8;这就是 IRI 所要求的,如果用户在地址栏中输入非 ASCII 字符,浏览器通常会提交什么,但 URI 本身只关注字节。

所以你可以转换ניב%F0%E9%E1. Web 应用程序无法判断这些字节表示的是在代码页 1255(希伯来语,类似于 ISO-8859-8)中编码的字符。但在上面的链接上,它似乎确实有效,而 UTF-8 版本却没有。哦亲爱的!

于 2010-02-17T13:32:43.977 回答