/** 微信小程序基础库未内置 TextEncoder,qrcode 库依赖它编码 payload */ function installTextEncodingPolyfill() { const root = (typeof globalThis !== 'undefined' ? globalThis : typeof global !== 'undefined' ? global : typeof wx !== 'undefined' ? wx : {}) as typeof globalThis & { TextEncoder?: typeof TextEncoder }; if (typeof root.TextEncoder !== 'undefined') return; class MiniTextEncoder implements TextEncoder { readonly encoding = 'utf-8'; encode(input?: string): Uint8Array { const str = input ?? ''; const bytes: number[] = []; for (let i = 0; i < str.length; i++) { let code = str.charCodeAt(i); if (code < 0x80) { bytes.push(code); } else if (code < 0x800) { bytes.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f)); } else if (code >= 0xd800 && code <= 0xdbff && i + 1 < str.length) { const next = str.charCodeAt(i + 1); if (next >= 0xdc00 && next <= 0xdfff) { i += 1; code = 0x10000 + ((code - 0xd800) << 10) + (next - 0xdc00); bytes.push( 0xf0 | (code >> 18), 0x80 | ((code >> 12) & 0x3f), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f), ); } else { bytes.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f)); } } else { bytes.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f)); } } return new Uint8Array(bytes); } } root.TextEncoder = MiniTextEncoder as unknown as typeof TextEncoder; } installTextEncodingPolyfill(); export {};