【问题标题】:how to insert %20 in place of space in android如何在android中插入%20代替空格
【发布时间】: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") 是解决方案。

标签: java android urlencode


【解决方案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 方法。

      这应该对你有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        • 2021-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多