UNPKG

tjc-sdk

Version:

TIANJI IM SDK

111 lines (101 loc) 2.77 kB
// 使用 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 };