uni-app,vue3,参考 https://github.com/123456789xzxz/miniprogram/blob/main/miniprogram-text-decoder.js,将以下代码另存为 @/utils/miniprogram-text-decoder.js,使用: import { TextDecoderPolyfill } from '@/utils/miniprogram-text-decoder'; const decoder = new TextDecoderPolyfill(); const arrayBuffer = uni.base64ToArrayBuffer(decoder.decode(response.data)) const data = decoder.decode(arrayBuffer) "use strict"; let TextDecoderPolyfill; const e = String.fromCharCode, t = Object.prototype.toString, r = t.call(ArrayBuffer.prototype), o = "undefined" != typeof SharedArrayBuffer ? t.call(SharedArrayBuffer) : "", d = function(t) { const r = t.charCodeAt(0), o = 0 | t.length; let d = 1114112, c = 0, a = ""; switch (r >>> 4) { case 12: case 13: d = (31 & r) << 6 | 63 & t.charCodeAt(1), c = d < 128 ? 0 : 2; break; case 14: d = (15 & r) << 12 | (63 & t.charCodeAt(1)) << 6 | 63 & t.charCodeAt(2), c = d < 2048 ? 0 : 3; break; case 15: r >>> 3 == 30 && (d = (7 & r) << 18 | (63 & t.charCodeAt(1)) << 12 | (63 & t.charCodeAt(2)) << 6 | t .charCodeAt(3), c = d < 65536 ? 0 : 4) } for (c && (o < c ? c = 0 : d < 65536 ? a = e(d) : d < 1114112 ? (d = d - 65664 | 0, a = e(55296 + (d >>> 10) | 0, 56320 + (1023 & d) | 0)) : c = 0); c < o; c = c + 1 | 0) a += " "; return a }, c = ["utf-8", "utf8", "unicode-1-1-utf-8"]; class a { constructor(e, t) { if (this.encoding = "utf-8", this.fatal = !1, this.ignoreBOM = !1, e && -1 === c.indexOf(e .toLowerCase())) throw new RangeError( `Failed to construct 'TextDecoder': The encoding label provided ('${e}') is invalid.`); if (t) { if (t.fatal) throw new Error( "Failed to construct 'TextDecoder': the 'fatal' option is unsupported."); if (t.ignoreBOM) throw new Error( "Failed to construct 'TextDecoder': the 'ignoreBOM' option is unsupported.") } } decode(c, a) { if (a && a.stream) throw new Error("Failed to decode: the 'stream' option is unsupported."); const i = c && c.buffer || c, n = t.call(i); if (n !== r && n !== o && void 0 !== c) throw TypeError( "Failed to execute 'decode' on 'TextDecoder': The provided value is not of type '(ArrayBuffer or ArrayBufferView)'" ); const f = new Uint8Array(i); let l = ""; for (let t = 0, r = 0 | f.length; t < r; t = t + 32768 | 0) l += e.apply(0, f.subarray(t, t + 32768 | 0)); return l.replace(/[\xc0-\xff][\x80-\xbf]+|[\x80-\xff]/g, d) } toString() { return "[object TextDecoder]" } } "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(a.prototype, Symbol.toStringTag, { value: "TextDecoder" }), TextDecoderPolyfill = a export { TextDecoderPolyfill }
微信小程序不支持TextDecoder// 将十六进制字符串转中文:hex为十六进制字符串 encoding为编码格式,默认是utf-8 export function hexToStr(hex,encoding) { // 去掉字符串首尾空格 let trimedStr = hex.trim() // 判断trimedStr前两个字符是否为0x,如果是则截取从第三个字符及后面所有,否则返回全部字符 let rawStr = trimedStr.substr(0, 2).toLowerCase() === "0x" ? trimedStr.substr(2) : trimedStr // 得到rawStr的长度 let len = rawStr.length // 如果长度不能被2整除,那么传入的十六进制值有误,返回空字符 if (len % 2 !== 0) { return "" } let curCharCode // 接收每次循环得到的字符 let resultStr = [] // 存转换后的十进制值数组 for (let i = 0; i < len; i = i + 2) { curCharCode = parseInt(rawStr.substr(i, 2), 16) resultStr.push(curCharCode) } // encoding为空时默认为utf-8 let bytesView = new Uint8Array(resultStr) // 8 位无符号整数值的类型化数组 // TextEncoder和TextDecoder对字符串和字节流互转 let str = new TextDecoder(encoding).decode(bytesView) return str }
08-18解决了吗
canvas组件绘制图片时存在内存泄漏问题canvas组件在绘制图片时存在内存泄漏问题,无论canvas 2d还是webgl,iOS还是Android都存在该问题 复现路径:打开我提供的代码片段,链接上perfdog,点击【带图】的按钮打开canvas页面,返回上一层页面,重复该操作,perfdog可见内存泄漏,在一定次数后,iOS平台内存超过限制会被系统kill,Android内存占用不断上升,导致操作卡顿 [图片] [图片] [图片] 由于业务依赖该组件,且已接近开发完成,计划于近期上线,望尽快处理修复
2023-10-28你好,请问解决了么?
小程序的 VideoDecoder 解码器,解码视频的结果丢失了视频的最后几帧,是什么原因?这是视频的结尾 [图片] [图片] 这是解码器的结尾 [图片]
2023-10-09这权限那权限整得太麻烦了,用户需要的是便利
关于订阅消息的见解?作为有限数量消息开发者,通过模板消息和订阅消息都使用过了,现发表下个人想法:作为模板消息,确实有7天的短板,经常要勾引用户去点击,会导致乱发消息(好像那时候没审核项目类型,消息类型可以乱选择发送);选择的订阅消息,虽然没有7天时间限制了,搞不好,一个普通的用户可能要开关好多个消息类型(比较麻烦)。 其实可以综合上面两个消息:不要搞的消息类型必须和订阅相对应,你一个小程序已经审核好只能发哪些消息了,那也就没什么违规的,而且对应普通用户来说,我点了一次,你不管什么消息,就只能给我发一次,也就是把两个消息类型综合起来,这样对普通用户就是个福音,别老点来点去授权来授权去,一次授权接收消息就行,没点就不能发。
2020-02-22附议
能不能放开5个小程序限制?这个限制太奇怪了
2020-02-22