如何在android中插入%20代替空格
Posted
技术标签:
【中文标题】如何在android中插入%20代替空格【英文标题】:how to insert %20 in place of space in android 【发布时间】:2011-08-28 01:43:51 【问题描述】:我有一个 xml URL 文件,其中有空格我想用 %20 替换空格.. 怎么做????
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
/** Send URL to parse XML Tags */
URL sourceUrl = new URL(
"http://www.arteonline.mobi/iphone/output.php?gallery=MALBA%20-%20MUSEO%20DE%20ARTE%20LATINOAMERICANO%20DE%20BUENOS%20AIRES");
XMLHandlerartistspace myXMLHandler = new XMLHandlerartistspace();
xr.setContentHandler(myXMLHandler);
xr.parse(new InputSource(sourceUrl.openStream()));
【问题讨论】:
URLEncoder.encode(value, "UTF-8")
是解决方案。
【参考方案1】:
试试这个:
String temp = http://www.arteonline.mobi/iphone/output.php?gallery=MALBA%20-%20MUSEO%20DE%20ARTE%20LATINOAMERICANO%20DE%20BUENOS%20AIRES
temp = temp.replaceAll(" ", "%20");
URL sourceUrl = new URL(temp);
【讨论】:
我认为这是错误的做法。 URL(不包括主机部分)应该是 URL 编码的(使用URLEncoder.encode
)。之后,您可以将+
字符替换为%20
。如果您不使用URLEncoder.encode
,那么URL 中的其他特殊字符可能会导致问题。 (请注意,+
表示空格字符在 URL 中完全有效;您甚至可能不需要 %20
。)
+1 感谢您的解决方案。它就像一个魅力!你救了我的一天;)再次感谢你;)
请注意下面的 URI.Builder 解决方案是正确的。这可以完成工作.. 但在专业环境中,您需要 SudoCode 的解决方案【参考方案2】:
在构建 URL 时,您应该使用 URLEncoder 对参数进行编码。
StringBuilder query = new StringBuilder();
query.append("gallery=");
query.append(URLEncoder.encode(value, "UTF-8"));
如果您已经将整个 URL 保存在 String 或 java.net.URL 中,您可以在 URLEncoding 每个参数值时抓取查询部分并重建。
【讨论】:
这是正确的方法。如果您自己使用正则表达式或 replaceAll,那么您做错了。 但请确保您没有对 url 的主机部分和 url 中的“/”字符进行 URL 编码。尝试完整 url 的子字符串,或者在构建过程中按照字符串生成器建议的 sudocode 执行它。 如果由于某种原因 OP 不能使用+
表示空格并且确实需要 %20
,那么在调用 URLEncoder.encode
之后调用 replace("+", "%20")
就很容易了。
为什么query.append("gallery=");
?
@MuhammedRefaat 参数名称和等号不需要进行 URL 编码。参数值应该是。【参考方案3】:
对 sudocode 的响应仅添加一项:
使用android.net.Uri.encode
而不是URLEncoder.encode
以避免“空格转换为+”问题。然后你摆脱String.replaceAll()
,它更优雅:)
StringBuilder query = new StringBuilder();
query.append("gallery=");
query.append(android.net.Uri.encode(value));
【讨论】:
正确用法是android.net.Uri.encode(value,":/"),其中第二个参数是不应该编码的字符列表 这应该是投票最多和选择最多的一个。 +1 @Softec 我根据您的评论删除了可选的第二个参数。【参考方案4】:我猜你想替换所有空格,而不仅仅是白色。
最简单的方法是使用
"url_with_spaces".replaceAll(" ", "%20);
但是,您还应该考虑 url 中的其他字符。见Recommended method for escaping html in Java
【讨论】:
如果你想对 url 中的蓝色或红色空格进行编码怎么办?【参考方案5】:String s = "my string";
s=s.replaceAll(" ", "%20");
【讨论】:
【参考方案6】:对于需要将空格字符编码为 %20
值而不是 +
值的任何人,请使用:
String encodedString = URLEncoder.encode(originalString,"UTF-8").replaceAll("\\+", "%20")
【讨论】:
【参考方案7】:尝试使用来自 api org.apache.commons.httpclient.util.URIUtil
的 URIUtil.encodePath
方法。
这应该对你有用。
【讨论】:
以上是关于如何在android中插入%20代替空格的主要内容,如果未能解决你的问题,请参考以下文章