tjc-sdk
Version:
TIANJI IM SDK
111 lines (101 loc) • 2.77 kB
JavaScript
// 使用 Buffer 来处理 base64
import { Buffer } from 'buffer';
const c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
export function btoa(e) {
for (
var t, r, o = String(e), n = 0, a = c, i = "";
o.charAt(0 | n) || ((a = "="), n % 1);
i += a.charAt(63 & (t >> (8 - (n % 1) * 8)))
) {
if (255 < (r = o.charCodeAt((n += 0.75))))
throw new Error(
"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range."
);
t = (t << 8) | r;
}
return i;
}
export function atob(e) {
var t = String(e).replace(/[=]+$/, "");
if (t.length % 4 == 1)
throw new Error(
"'atob' failed: The string to be decoded is not correctly encoded."
);
for (
var r, o, n = 0, a = 0, i = "";
(o = t.charAt(a++));
~o && ((r = n % 4 ? 64 * r + o : o), n++ % 4)
? (i += String.fromCharCode(255 & (r >> ((-2 * n) & 6))))
: 0
)
o = c.indexOf(o);
return i;
}
/**
* UTF-8 字符串转 base64
* @param {string} str UTF-8 字符串
* @returns {string} base64 字符串
*/
export function utf8_to_b64(str) {
return btoa(unescape(encodeURIComponent(str)));
}
/**
* base64 转 UTF-8 字符串
* @param {string} str base64 字符串
* @returns {string} UTF-8 字符串
*/
export function b64_to_utf8(str) {
return decodeURIComponent(escape(atob(str)));
}
/**
* base64 转 ArrayBuffer
* @param {string} str base64 字符串
* @returns {ArrayBuffer} ArrayBuffer
*/
export function b64_to_arrayBuffer(str) {
let binary_string = atob(str);
let len = binary_string.length;
let bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
/**
* ArrayBuffer 转 base64
* @param {ArrayBuffer} data ArrayBuffer
* @returns {string} base64 字符串
*/
export function arrayBuffer_to_b64(data) {
return Buffer.from(data).toString('base64');
}
/**
* URL 安全的 base64 解码
* @param {string} str URL 安全的 base64 字符串
* @returns {string} 标准 base64 字符串
*/
export function unescape(str) {
return (str + '==='.slice((str.length + 3) % 4))
.replace(/-/g, '+')
.replace(/_/g, '/');
}
/**
* URL 安全的 base64 编码
* @param {string} str 标准 base64 字符串
* @returns {string} URL 安全的 base64 字符串
*/
export function escape(str) {
return str.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
}
export default {
btoa,
atob,
utf8_to_b64,
b64_to_utf8,
b64_to_arrayBuffer,
arrayBuffer_to_b64,
unescape,
escape
};