如何在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.URIUtilURIUtil.encodePath 方法。

这应该对你有用。

【讨论】:

以上是关于如何在android中插入%20代替空格的主要内容,如果未能解决你的问题,请参考以下文章

Sybase插入一个空格代替空字符串''

如何在python中动态地读取用空格分隔的输入,最好是在List上读取不同类型的数据?

如何在字符串中插入空格,包括在字符串中的空格周围?

如何在Markdown文档中插入空格?

如何在 JSF 页面中插入不间断空格字符?

如何使用 MySQL 字符串函数在单词中插入空格?