java (Android) 中的 URLEncoder 编码 / URLDecoder 解码

Posted

技术标签:

【中文标题】java (Android) 中的 URLEncoder 编码 / URLDecoder 解码【英文标题】:URLEncoder encode / URLDecoder decode in java (Android) 【发布时间】:2010-10-28 03:48:05 【问题描述】:

我想在应用程序中使用 URLEncoder/URLDecoder 类 (java.net.URLEncoder/URLDecoder) 和方法:encode(String s, String enc)/decode(String s, String enc),但我没有不知道字符串参数 enc 的值是多少? 我想在“x-www-form-urlencoded”MIME 内容类型中编码/解码。 感谢您的帮助。

【问题讨论】:

【参考方案1】:

编码参数是您使用的字符编码。 For example "UTF-8".

【讨论】:

所以我必须这样写: encode("hello","x-www-form-urlencoded") 或者对于 "x-www-form-urlencoded" 它是 encode("hello" "UTF-8")? 你必须写 encode("hello","UTF-8")。 x-www-form-urlencoded 始终是结果的类型。编码参数是指您的输入数据。 是否有预定义的常量用于可能的字符编码? android 文档太糟糕了! URLEncoder 类文档甚至没有提到“UTF-8”developer.android.com/reference/java/net/URLEncoder.html【参考方案2】:

首先,您需要将内容类型设置为“x-www-form-urlencoded”。然后,无论您想编码什么内容,都使用“UTF-8”对其进行编码。

例如:

将内容设置为“x-www-form-urlencoded”:

URL url = new URL("http://www.xyz.com/SomeContext/SomeAction"); <br>
URLConnection urlConnection = url.openConnection();<br>
....<br>
....<br>
urlConnection.setRequestProperty("Content-type","application/x-www-form-urlencoded");

或者,如果您正在使用一些 JSP,那么您可以在其上编写以下内容。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><br>
< META http-equiv="Content-Type" content="text/html; charset=UTF-8">


< FORM action="someaction.jsp" enctype="application/x-www-form-urlencoded" name="InputForm" method="POST">

以及使用 URLEncoder:

String encodedString = URLEncoder.encode("hello","UTF-8");

【讨论】:

我已经完成了: - HttpPost post = new HttpPost("url"); - post.setHeader("Content-Type", "application/x-www-form-urlencoded"); - 字符串编码字符串 = URLEncoder.encode("hello","UTF-8"); - 字符串实体临时; - temp.setContentEncoding(encodedString); - post.setEntity(temp);然后执行一个 DefaultHttpClient 和 post 作为参数。 问题实际上是由于我在 encode(String s, String enc) 中放置了“application/x-www-form-urlencoded”而不是“UTF-8”...再次谢谢。【参考方案3】:

JavaDoc 包含所有详细信息

【讨论】:

JavaDoc 没有提到所有可能的编码格式,我也没有看到指向可能列出它们的 ENUM 的链接。【参考方案4】:

URLEncoderURLDecoder 都是异常 Throwable,因此必须至少包含在 try/catch 块中。但是使用android.net.Uri 有一点更简单的方法:

Uri.decode(string);
Uri.encode(string);

这些是静态方法,使用 utf-8,从 API-1 开始可用并且不会引发异常。

【讨论】:

【参考方案5】:

我个人最喜欢的:

static String baseNameFromURL(URL url) 
    String shortName;
    String path = url.getPath();
    String escaped = path.substring(path.lastIndexOf('/') + 1);
    try 
        shortName = URLDecoder.decode(escaped, "UTF-8");
     catch (UnsupportedEncodingException e) 
        throw new Error(e.getMessage(), e);
    
    int period = shortName.lastIndexOf('.');
    return period > -1 ? shortName.substring(0, period) : shortName;

如果 URL 没有文件名部分,则返回一个空字符串,例如 https://***.com/https://***.com/questions/。如果文件名部分有反斜杠,则保留。

如果您需要带有扩展名的短名称,则可以去掉最后两行。

【讨论】:

以上是关于java (Android) 中的 URLEncoder 编码 / URLDecoder 解码的主要内容,如果未能解决你的问题,请参考以下文章

Android Java中的一些使用例子

Android学习探索之Java 8 在Android 开发中的应用

字节码插桩Android 打包流程 | Android 中的字节码操作方式 | AOP 面向切面编程 | APT 编译时技术

java中的JSON.stringify - android

swift中的任何功能是不是类似于Android中的R.java?

Ensime 用于 android 项目中的 .java 文件