用于apache httpclient 4的UNICODE中的URI编码

我正在使用apache http client 4进行所有的Web访问。 这意味着我需要做的每个查询都必须通过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转换url( “ http://…srh_txt=%s& …”,URLEncoder.encode(“ניב”,“UTF8”))会产生一个合法的url,可用于构建URI但网站响应为它带有错误消息,因为它不是它所期望的编码。

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

谢谢,Niv

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

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

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

(一般情况下,应该永远不要使用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版本没有。 噢亲爱的!