gpt4 book ai didi

javascript - Android 中的 Uri.encode() 是否等同于 Javascript 中的 encodeURIComponent()?

转载 作者:太空狗 更新时间:2023-10-29 16:34:42 26 4
gpt4 key购买 nike

我试图阐明 Java 的 URLEncoder.encode()、Javascript 的 encodeURI()encodeURIComponent() 和 Android 的 Uri.encode().

看起来像这样:

  • 字母和数字
    • 每个人都保留
  • .-*_
    • 每个人都保留
  • !~'()
    • URLEncoder.encode() 编码,其他保留
  • ,/?:@&=+$#
    • encodeURI() 保留,其他人编码
  • 空间
    • + 用于URLEncoder.encode()%20 用于其他

似乎 URLEncoder.encode()encodeURIComponent() 的行为相同。我说的对吗,还是说他们其实也有区别?

最佳答案

有趣的问题。我只是运行了一些代码来测试这个:

Javascript encodeURIComponent

encodeURIComponent escapes all characters except:

Not Escaped: A-Z a-z 0-9 - _ . ! ~ * ' ( )

代码:

var sb = [];
for (var i = 0; i < 256; ++i) {
var encoded = encodeURIComponent(String.fromCharCode(i));
if (encoded.indexOf('%') !== 0 && !encoded.match(/^[a-zA-Z0-9]+$/)) {
sb.push(encoded);
}
}
console.log(sb.join(' '));

结果:

! ' ( ) * - . _ ~

Javascript encodeURI

encodeURI escapes all characters except:

Not Escaped: A-Z a-z 0-9 - _ . ! ~ * ' ( ) ; , / ? : @ & = + $ #

代码:

var sb = [];
for (var i = 0; i < 256; ++i) {
var encoded = encodeURI(String.fromCharCode(i));
if (encoded.indexOf('%') !== 0 && !encoded.match(/^[a-zA-Z0-9]+$/)) {
sb.push(encoded);
}
}
console.log(sb.join(' '));

结果:

! # $ & ' ( ) * + , - . / : ; = ? @ _ ~

Java URLEncoder.encode

Translates a string into application/x-www-form-urlencoded format using a specific encoding scheme. This method uses the supplied encoding scheme to obtain the bytes for unsafe characters.

代码:

public static void main(String[] args) {
try {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 256; ++i) {
String encoded = URLEncoder.encode(String.valueOf((char) i), "UTF-8");
if (!encoded.startsWith("%") && !encoded.matches("^[a-zA-Z0-9]+$")) {
sb.append(' ').append(encoded);
}
}
System.out.println(sb.substring(1));
} catch (Exception e) {}
}

结果:

请注意 + 实际上是一个空格。

+ * - . _

Android Uri.encode

Encodes characters in the given string as '%'-escaped octets using the UTF-8 scheme. Leaves letters ("A-Z", "a-z"), numbers ("0-9"), and unreserved characters ("_-!.~'()*") intact. Encodes all other characters.

代码:

try {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 256; ++i) {
String encoded = Uri.encode(String.valueOf((char) i));
if (!encoded.startsWith("%") && !encoded.matches("^[a-zA-Z0-9]+$")) {
sb.append(' ').append(encoded);
}
}
System.out.println(sb.substring(1));
} catch (Exception e) {}

结果:

! ' ( ) * - . _ ~

关于javascript - Android 中的 Uri.encode() 是否等同于 Javascript 中的 encodeURIComponent()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31511922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com