不幸的是,URLEncoder.encode()无法产生有效的百分比编码(如http://tools.ietf.org/html/rfc3986#section-2.1中所指定)。
URLEncoder.encode()可以对所有内容进行正确编码,除了将空格编码为“ +”之外。我只能找到的所有Java URI编码器都只公开用于对查询,片段,路径部分等进行编码的公共方法-但不公开“原始”编码。不幸的是,由于允许片段和查询将空格编码为+,因此我们不想使用它们。路径已正确编码,但首先被“规范化”,因此我们也不能将其用于“通用”编码。
我能想到的最佳解决方案:
return URLEncoder.encode(raw, "UTF-8").replaceAll("\\+", "%20");
如果replaceAll()对您来说太慢,我想替代方法是滚动您自己的编码器...
编辑:我首先在这里有此代码不正确编码“?”,“&”,“ =”:
//don't use - doesn't properly encode "?", "&", "="
new URI(null, null, null, raw, null).toString().substring(1);