chore: initialize qiming workspace repository
This commit is contained in:
30
qiming-mobile/utils/utf8.uts
Normal file
30
qiming-mobile/utils/utf8.uts
Normal file
@@ -0,0 +1,30 @@
|
||||
// UTF-8 解码工具:将 Uint8Array 转换为字符串,兼容微信小程序无 TextDecoder 场景
|
||||
export function utf8ArrayToString(bytes: Uint8Array): string {
|
||||
let out = ''
|
||||
let i = 0
|
||||
const len = bytes.length
|
||||
while (i < len) {
|
||||
const c = bytes[i++]
|
||||
if (c < 0x80) {
|
||||
out += String.fromCharCode(c)
|
||||
} else if (c < 0xE0) {
|
||||
const c2 = bytes[i++]
|
||||
out += String.fromCharCode(((c & 0x1F) << 6) | (c2 & 0x3F))
|
||||
} else if (c < 0xF0) {
|
||||
const c2 = bytes[i++]
|
||||
const c3 = bytes[i++]
|
||||
out += String.fromCharCode(((c & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F))
|
||||
} else {
|
||||
const c2 = bytes[i++]
|
||||
const c3 = bytes[i++]
|
||||
const c4 = bytes[i++]
|
||||
let codepoint = ((c & 0x07) << 18) | ((c2 & 0x3F) << 12) | ((c3 & 0x3F) << 6) | (c4 & 0x3F)
|
||||
codepoint -= 0x10000
|
||||
out += String.fromCharCode(0xD800 + (codepoint >> 10))
|
||||
out += String.fromCharCode(0xDC00 + (codepoint & 0x3FF))
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user