Java apache httpclient 4的UNICODE URI编码

Java apache httpclient 4的UNICODE URI编码,java,encoding,uri,httpclient,Java,Encoding,Uri,Httpclient,我正在使用ApacheHTTP客户端4进行所有web访问。 这意味着我需要执行的每个查询都必须通过URI语法检查。 我尝试访问的其中一个站点使用UNICODE作为url GET params编码,即: (参数“srh_-txt=%u05E0%u05D9%u05D1”以UNICODE编码srh_-txt=ניב) 问题是URI不支持UNICODE编码(它只支持UTF-8) 这里真正的大问题是,该站点希望它的参数以UNICODE编码,因此任何使用String.format(“…”,URLEncod

我正在使用ApacheHTTP客户端4进行所有web访问。 这意味着我需要执行的每个查询都必须通过URI语法检查。 我尝试访问的其中一个站点使用UNICODE作为url GET params编码,即:

(参数“srh_-txt=%u05E0%u05D9%u05D1”以UNICODE编码srh_-txt=ניב)

问题是URI不支持UNICODE编码(它只支持UTF-8) 这里真正的大问题是,该站点希望它的参数以UNICODE编码,因此任何使用String.format(“…”,URLEncoder.encode(“UTF8”))转换url的尝试都是如此 结果是一个合法的url,可用于构造URI,但站点对它的响应会显示错误消息,因为它不是预期的编码

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

谢谢, Niv

(参数“srh_-txt=%u05E0%u05D9%u05D1”以UNICODE编码srh_-txt=ניב)

其实并不是。这不是URL编码,URL中的序列
%u
无效

%u05E0%u05D9%u05D1“
仅以JavaScript的古怪
转义
语法进行编码。
转义
与所有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版本则不起作用。哦,天哪

(参数“srh_-txt=%u05E0%u05D9%u05D1”以UNICODE编码srh_-txt=ניב)

事实并非如此。这不是URL编码,URL中的序列
%u
无效

%u05E0%u05D9%u05D1“
仅以JavaScript的古怪
转义
语法进行编码<代码>转义
与所有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版本则不起作用。哦,天哪

非常感谢您的回答,我在我的代码中运行了一个URL列表,有时会遇到URISyntaxExceptions,并试图找到解决其中一些问题的方法(上一篇文章中的异常只是列表中的URL之一),我认为这个问题在代码中被认为是“无法解决的”(没有花很多时间)我将继续下一个。再次感谢NivThanks的回答,我在我的代码中运行了一个URL列表,有时会遇到UriSyntaxException,并试图找到解决其中一些问题的方法(上一篇文章中的异常只是列表中的一个URL),我认为这个问题在代码中被认为是“无法解决的”(没有花太多时间)我将继续下一个。再次感谢Niv