用于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版本没有。 噢亲爱的!