小程序二维码功能

This commit is contained in:
2026-07-12 23:59:52 +08:00
parent 1bd152073a
commit f2cdc0222d
10 changed files with 658 additions and 63 deletions
@@ -0,0 +1,52 @@
/** 微信小程序基础库未内置 TextEncoderqrcode 库依赖它编码 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 {};