美文网首页
javaScript信息编码转换总结

javaScript信息编码转换总结

作者: 曲昶光 | 来源:发表于2021-08-11 16:53 被阅读0次

一、Unicode编码解码

JavaScript定义了 6 个全局方法用于 Unicode 字符串的编码和解码,说明如表所示。

方法 说明
escape() 使用转义序列替换某些字符来对字符串进行编码
unescape() 对使用 escape() 编码的字符串进行解码
encodeURI() 通过转义某些字符对 URI 进行编码
decodeURI() 对使用 encodeURI() 方法编码的字符串进行解码
encodeURIComponent() 通过某些转义字符对 URI 的组件进行编码
deencodeURIComponent() 对使用 encodeURIComponent() 方法编码的字符串进行解码
escape()和unescape()方法

escape() 方法能够把 ASCII 之外的所有字符转换为 %xx 或 %uxxxx(x表示十六进制的数字)的转义序列。从 \u000 到 \u00ff 的 Unicode 字符由转义序列 %xx 替代,其他所有 Unicode 字符由 %uxxxx 序列替代。

可以使用该方法对 Cookie 字符串进行编码,以避免与其他约定字符发生冲突,因为 Cookie 包含的标点符号是有限制的。

与 escape() 方法对应,unescape() 方法能够对 escape() 编码的字符串进行解码。

var s = "JavaScript 中国";
s = escape(s);  //Unicode编码
console.log(s);  //返回字符串“JavaScript%u4E2D%u56FD”
s = unescape(s);  //Unicode解码
console.log(s);  //返回字符串“JavaScript 中国”

这种被解码的代码是不能够直接运行的,我们可以使用 eval() 方法来执行它。

var s = escape('console/log("JavaScript 中国");');  //编码脚本
var s = unescape(s);  //解码脚本
eval(s);  //执行被解码的脚本
encodeURI() 和 decodeURI() 方法

ECMAScript v3.0 版本推荐使用 encodeURI() 和 encodeURIComponent() 方法代替 escape() 方法,使用 decodeURI() 和decodeURIComponent() 方法代替 unescape() 方法。

encodeURI() 方法能够把 URI 字符串进行转移处理。

encodeURI() 方法与 escape() 方法的编码结果是不同的,但是它们都不会编码 ASCII 字符。

相对而言,encodeURI() 方法更佳安全。它能够将字符转换为 UTF-8 编码字符,然后用十六进制的转义序列(形式为%xx)对生成的 1 字节、2 字节或 4 字节的字符进行编码。

使用 decodeURI() 方法可以对 encodeURI() 方法的结果进行解码。

var s = "JavaScript 中国";
s = encodeURI(s);  //URI编码
console.log(s);  //返回字符串“JavaScript%E4%B8%AD%E5%9B%BD”
s = decodeURI(s);  //URI解码
console.log(s);  //返回字符串“JavaScript 中国”
encodeURICompoent() 和 decodeURICompoent()

encodeURICompoent() 与 encodeURI() 方法不同。它们的主要区别在于,encodeURICompoent() 方法假定参数是 URI 的一部分,例如,协议、主机名、路径或查询字符串。因此,它将转义用于分隔 URI 各个部分的标点符号。而 encodeURI() 方法仅把它们视为普通的 ASCII 字符,并没有转换。

下面代码是 URL 字符串被 encodeURICompoent() 方法编码前后的比较。

var s = "c.biancheng.net/navi/search.asp?keyword=URI";
a = encodeURI(s);
console.log(a);
b = encodeURICompoent(s);
console.log(b);

c.biancheng.net/navi/search.asp?keyword=URI
c.biancheng.net%2Fnavi%2Fsearch.asp%3Fkeyword%3DURI

第一行字符串是 encodeURI() 方法编码的结果,第二行字符串是 encodeURICompoent() 方法编码的结果。与 encodeURI() 方法一样,encodeURICompoent() 方法对于 ASCII 字符不编码,用于 分隔 URI 各种组件的标点符号,都由一个或多个十六进制的转义序列替换。

使用 decodeURICompoent() 方法可以对 encodeURICompoent() 方法编码的结果进行解码。

var s = "c.biancheng.net/navi/search.asp?keyword=URI";
b = encodeURICompoent(s);
b = decodeURICompoent(b);
console.log(b);

参考:http://c.biancheng.net/view/5602.html

二、Gzip压缩解压

Gzip解压缩需要用到pako.js,引用方法如下:

<script src="https://cdn.bootcss.com/pako/1.0.6/pako.min.js"></script>  或者  npm install pako

然后封装解压缩方法:

// 解压
function unzip(key) {
  // 将二进制字符串转换为字符数组
  var charData = key.split('').map(function (x) { return x.charCodeAt(0); });
  console.log('压缩后的文件大小:', charData.join(","))
 
  // 将数字数组转换成字节数组
  var binData = new Uint8Array(charData);
 
  // 解压
  var data = pako.inflate(binData);
 
  // 将GunZip ByTAREAR转换回ASCII字符串
  key = String.fromCharCode.apply(null, new Uint16Array(data));
 
  //unescape(str)解压后解码,防止过程中乱码
  return unescape(key);
}
 
// 压缩
function zip(str) {
  //escape(str) 压缩前编码,防止过程中乱码
  var binaryString = pako.gzip(escape(str), { to: 'string' });
  return binaryString;
}

参考:https://blog.csdn.net/qq_35713752/article/details/82079629

三、js字符与ASCII码互转

大写字母A-Z对应的ASCII码值是65-90
小写字母a-z对应的ASCII码值是97-122
将字母转为ascii嘛的方法:

var str = "A";
str.charCodeAt();  // 65

var str1 = 'a';
str1.charCodeAt();  // 97

将ascii码转为对应字母的方法:

var num = 97;
String.fromCharCode(num);  // 'a'

var num1 = 100;
String.fromCharCode(num1);  // 'd'

参考:https://blog.csdn.net/xiaobing_hope/article/details/78645273

四、Base64编码和解码

Base64 是一种编码方式,可以将任意字符(包括二进制字符流)转成可打印字符。JavaScript 定义了两个与 Base64 相关的全局方法。

  • btoa():字符串或二进制值转为 Base64 编码。
  • atob():把 Base64 编码转为原来的字符。

Base64 方法不能够操作非 ASCII 字符。
要将非 ASCII 码字符转为 Base64 编码,必须把 Unicode 双字节字符串转换为 ASCII 字符表示,再使用这两个方法。

1.  function b64Encode (str) {
2.  return btoa(encodeURIComponent(str));
3.  }
4.  function b64Decode (str) {
5.  return decodeURIComponent(atob(str));
6.  }
7.  var b = b64Encode('[Java](http://c.biancheng.net/java/)Script 从入门到精通');
8.  var a = b64Decode(b);
9.  console.log(b); //返回SmF2YVNjcmlwdCVFNCVCQiU4RSVFNSU4NSVBNFOSU5NyVBOCVFNSU4OCVCMCVFNyVCMiVCRSVFOSU4MCU5QQ==
10.  console.log(a); //返回“JavaScript 从入门到精通”

相关文章

网友评论

      本文标题:javaScript信息编码转换总结

      本文链接:https://www.haomeiwen.com/subject/xuuxvltx.html