编码解码(btoa、encodeURIComponent、encodeURI)区别

485 阅读1分钟

window.btoa(str)

描述: 创建一个 base-64 编码的字符串,使用 "A-Z", "a-z", "0-9", "+", "/" 和 "=" 字符来编码字符串。

使用方法:

var str = "RUNOOB"; var enc = window.btoa(str);

解码方法:

window.atob(enc)

decodeURI()

描述: 专门用于uri编码中文处理,对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的: , / ? : @ & = + $ # (可以使用encodeURIComponent() 方法分别对特殊含义的 ASCII 标点符号进行编码)。假定URI 中的任何保留字符都有特殊意义,所有不会编码它们。

不编码字符有82个:! # $ & ’ ( ) * + , - . / : ; = ? @ _ ~ 0-9 a-z A-Z 使用方法:

var uri="my test?name=ståle&car=saab";
console.log(encodeURI(uri)); //my%20test?name=st%C3%A5le&car=saab

解码方法:

console.log(decodeURI(uri));   //my test.php?name=ståle&car=saab

decodeURIComponent()

描述: 用于url的组成部分编码,不能用于整个url编码。把字符串作为 URI 组件进行编码。该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。假定任何保留字符都代表普通文本,所以必须编码它们。

不编码字符有71个:! ’ ( ) * - . _ ~ 0-9 a-z A-Z 使用方法:

var uri="https://www.baidu.com/my test?name=ståle&car=saab"; 
var uri_encode=encodeURIComponent(uri); 
console.log(uri_encode); //https%3A%2F%2Fwww.baidu.com%2Fmy%20test%3Fname%3Dst%C3%A5le%26car%3Dsaab

解码方法:

console.log(decodeURIComponent(uri_encode))  //https://www.baidu.com/my test?name=ståle&car=saab