如何在android中插入%20代替空格

SRa*_*Ram 32 java android urlencode

我有一个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()));
Run Code Online (Sandbox Code Playgroud)

Sum*_*ant 52

试试这个:

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);
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是错误的做法.URL(不包括主机部分)应该是URL编码的(使用`URLEncoder.encode`).在这之后,你可以用`%20`替换`+`字符.如果您不使用`URLEncoder.encode`,那么URL中的其他特殊字符可能会导致问题.(注意,表示空格字符的`+`在URL中完全有效;您甚至可能不需要`%20`.) (8认同)

sud*_*ode 34

构建URL时,应使用URLEncoder对参数进行编码.

StringBuilder query = new StringBuilder();
query.append("gallery=");
query.append(URLEncoder.encode(value, "UTF-8"));
Run Code Online (Sandbox Code Playgroud)

如果您已经在String或java.net.URL中拥有整个URL,则可以获取查询部分并在URLEncoding每个参数值时重建.

  • 如果出于某种原因OP不能使用表示空格的`+`并且真的需要`%20`,那么在调用`URLEncoder.encode`之后调用`replace("+","%20")`很容易. (7认同)

小智 12

只是sudocode响应的一个补充:

使用android.net.Uri.encode而不是URLEncoder.encode来避免"空间转换成+"问题.然后你摆脱了String.replaceAll(),它更优雅:)

StringBuilder query = new StringBuilder();
query.append("gallery=");
query.append(android.net.Uri.encode(value, "UTF-8"));
Run Code Online (Sandbox Code Playgroud)

  • 正确的用法是 android.net.Uri.encode(value,":/"),其中第二个参数是不应编码的字符列表 (3认同)
  • 这应该是最受好评和选择的一个。+1 (2认同)