在前端开发中,我们经常需要对字符串进行编码和解码。其中,base64 编码是较为常见的编码方式,而要在 JavaScript 中实现 base64 编码并不是一件很简单的事情。而 strman.encode
包就是一个非常好用的 npm 包,可以方便地实现 base64 编码和其他常用编码方式的转换。
安装和使用
strman.encode
包可以通过 npm 安装:
npm install strman --save
然后在代码中导入它:
const strman = require('strman');
使用过程中我们需要注意,strman.encode
包提供了多种编码方案,我们需要根据具体需要选择合适的函数。
Base64 编码
const str = 'hello, strman!'; const base64 = strman.encode.base64(str); console.log(base64); // aGVsbG8sIHN0cm1hbg==
URL 编码
const str = 'hello, strman!'; const url = strman.encode.url(str); console.log(url); // hello%2C%20strman%21
HTML 实体编码
const str = '"hello", strman!'; const html = strman.encode.htmlEntities(str); console.log(html); // "hello", strman!
自定义编码表的编码
-- -------------------- ---- ------- ----- --- - ------- --------- ----- ----- - - ---- -- ---- -- ---- -- ---- -- ---- -- - -- -- ---- -- ---- -- ---- -- ---- - -- ----- ------ - ------------------------- ------- -------------------- -- ------------
深度内容
Base64 编码详解
Base64 编码是一种用于把任意二进制数据编码成 ASCII 字符串的方法,常用于在 URL、Cookie、网页中传输少量二进制数据,比如在读取本地图片并在网页中显示时,需要把图片数据编码成 Base64 字符串传输。Base64 编码的原理非常简单:将 3 个字节转换成 4 个字节,每个字节充当 6 个 bit 位,对应 Base64 字符表中的一个字符。
一个比较全的 Base64 字符表如下所示:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
举个例子,对于字符串 Man
,对应的 ASCII 码为 77 97 110,对应的二进制码为 01001101 01100001 01101110。每 3 个字符一组,我们将三个八位二进制数拼接在一起组成 24 位二进制数,再将这 24 位划分为四组,每 6 位一组。这样就得到 4 个数字,将这四个数字转换为对应的 Base64 字符。
77 | 01101101 97 | 01100001 110 | 01101110
经过拼接后得到:
01101101 01100001 01101110
再将这 24 位二进制数每 6 位一组,得到:
011011 010110 000101 101110
依次将这 4 个数字转换为对应的 Base64 字符,得到:
TWFu
因此 Man
的 Base64 编码为 TWFu
。
Base64 编码的优劣
Base64 编码有一个明显的优点,就是不会出现乱码。由于 Base64 字符只包含 ASCII 可见字符,进行经过该编码的字符串在不支持二进制传输的地方,仍能正常传输。另外 Base64 编码也有一个很显然的劣点,就是编码后的字符串长度总是大于原来的字符串长度。
举个例子,对于字符串 hello
,可知他的原始长度为 5。
const str = 'hello'; const base64 = strman.encode.base64(str); console.log(base64); // aGVsbG8= console.log(base64.length); // 8
可以看到,经过 Base64 编码后的字符串长度为 8,比原始长度的 1.6 倍还要长。针对这种情况,我们可以使用其他编码方案如 URL 编码或自定义编码表编码等方式实现编码。
结语
在前端开发过程中,虽然 JavaScript 已经内置了 base64 相关工具函数,但实现起来较为繁琐。而 strman.encode
包则让我们在使用 base64 编码等各种编码算法时变得十分简单。同时,该包还支持多种其他编码方案,开发者可以根据具体需求进行使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005570581e8991b448d3eb1