Java apache httpclient 4的UNICODE URI编码
我正在使用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中的序列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
%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