Java 空间编码为+;和URL中的%20
URL中带有空格的页面无法正确翻译: i、 e 发布/反映在Plano住房市场的国家趋势/9778767.html 或 给404。请注意,“新闻稿”编码为“新闻稿” 然而,在“新闻稿”编码为“新闻+新闻稿”的情况下,以下两个版本可以很好地工作 文章用加号或十六进制空格%20解析得很好。 +和%20都表示空格。那么为什么会有这种行为 而且,在java中,我可以使用什么来获得正确的编码URL +和%20都表示空格 仅在查询字符串中。在URL的其他地方,加号是加号,而不是空格。在这种情况下,web服务器为两个不同的URL提供相同的内容 及Java 空间编码为+;和URL中的%20,java,url,encoding,query-string,Java,Url,Encoding,Query String,URL中带有空格的页面无法正确翻译: i、 e 发布/反映在Plano住房市场的国家趋势/9778767.html 或 给404。请注意,“新闻稿”编码为“新闻稿” 然而,在“新闻稿”编码为“新闻+新闻稿”的情况下,以下两个版本可以很好地工作 文章用加号或十六进制空格%20解析得很好。 +和%20都表示空格。那么为什么会有这种行为 而且,在java中,我可以使用什么来获得正确的编码URL +和%20都表示空格 仅在查询字符串中。在URL的其他地方,加号是加号,而不是空格。在这种情况下,we
但是这两个URL是不同的,它们不是同一URL的替代表示。官方
+
可能只在查询字符串中使用(在之后?
)
这就是URLEncoder的用途:
"?x=" + URLEncoder.encode("Hello World", "UTF-8");
"?x=" + URLEncoder.encode("ŝi estas ĉarma", "UTF-8");
?x=Hello+World
?x=%C5%9Di+estas+%C4%89arma
更通用的类URI遵循要替换的空间规范,使用%
URI uri = new URI("http", "www.streetinsider.com",
"/Press Releases/National Trends Reflected in Plano Housing Market/9778767.html",
"?x=ŝi estas ĉarma");
String u = uri.toString();
http://www.streetinsider.com/Press%20Releases/National%20Trends%20
Reflected%20in%20Plano%20Housing%20Market/9778767.html#?x=ŝi%20estas%20ĉarma
有时会遇到URI作为文件和其他文件的泛化,然后必须小心不要在文件名中引入%20
因此,可能有一个部分重新映射在街道边的+
,甚至%20
,就像它看起来的那样;以达到相同的代码。您的声明
Both + and %20 represent spaces.
并非在所有情况下都完全正确
空格字符只能在一个上下文中编码为“+”:application/x-www-form-urlencoded键值对
RFC-1866(HTML 2.0规范),第8.2.1段。第1分段。说明:“表单字段名和值被转义:空格字符被“+”替换,然后保留字符被转义”)
以下是URL中此类字符串的示例,其中RFC-1866允许将空格编码为加号:“”。因此,只有在“?”之后,空格才能被加号替换(在其他情况下,空格应编码为%20)。在以后的HTML规范中也给出了这种对表单数据进行编码的方法,例如,查找有关application/x-www-form-urlencoded in HTML4.01规范的相关段落,等等
您提供的URL不是包含键/值对的表单数据,它只是指向9778767.html文件的路径:
http://www.streetinsider.com/Press%20Releases/National+Trends+Reflected+in+Plano+Housing+Market/9778767.html
所以,在这里使用加号是违法的。在这种情况下,正确的URL应该是:
http://www.streetinsider.com/Press%20Releases/National%20Trends%20Reflected%20in%20Plano%20Housing%20Market/9778767.html