JS 和 Java 中URL特殊字符编码方式

时间:2021-09-26 00:22:50

  前几天遇到url特殊字符编码的问题,在这里整理一下:

  JavaScript

  1.  编码 escape(String)

    其中某些字符被替换成了十六进制的转义序列。

   

   解码 unescape(String)

    该函数的工作原理是这样的:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。

    *注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

  2. 编码 encodeURI(URIstring)

    返回值:URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

    *如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。

   解码 decodeURI(URIstring)

    返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。

  3. 编码 encodeURIComponent(URIstring)

    返回值:URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

   解码 decodeURIComponent(URIstring)

    返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。

  *encodeURIcomponent() 与 encodeURI() 区别

    encodeURIComponent(URIstring) : 假定其参数是URI一部分(比如协议、主机名、路径或查询字符串),因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号(? # 等)。

    encodeURI(URIstring) : 不会对URI中的分隔符编码,如 ? # 等。

  Java

    编码: Class URLEncoder 

    static String encode(String s);
    static String encode(String s, String enc);//enc 编码方式 推荐使用UTF-8

    解码: Class URLDecoder

    static String decode(String s);
    static String decode(String s, String enc);//enc 编码方式 推荐使用UTF-8

    * Java中的编码解码方式和JS中的encodeURIComponent()/decodeURIComponent()方法是前后台通用的;两者在处理字符串的方式是没有区别的;