微信小程序 JS 字符串string与utf8编码的arraybuffer的相互转换

微信小程序 JS 字符串string与utf8编码的arraybuffer的相互转换


    &#8194最近在做一个微信小程序,和后端用websocket连接,后端要求传输过去的信息是UTF8编码的二进制信息。JS并没有可以直接进行转换的库函数,因此必须自己写一个编码以及解析的函数。
    最开始采用了一个字符一个字符的charCodeAt,但是通过这种方式可以传输非中文的内容,有中文时则无法正确的转换。
    后来参考了网上的一些资料,通过先将字符串编码并转换为byte[],再转换为对应的arraybuffer(解析同理,先将arraybuffer转换为byte[],再进行解码)
    编码及解码的过程较复杂,不过这两个函数是可以直接使用的,同时支持中文和英文。

function stringToArrayBuffer(str) {
   
	var bytes = new Array(); 
	var len,c;
	len = str.length;
	for(var i = 0; i < len; i++){
   
		c = str.charCodeAt(i);
		if(c >= 0x010000 && c <= 0x10FFFF){
   
			bytes.push(((c >> 18) & 0x07) | 0xF0);
			bytes.push(((c >> 12) & 0x3F) | 0x80);
			bytes.push(((c >> 6) & 0x3F
### 小程序中使用 ArrayBuffer 处理音频 在微信小程序环境中,`ArrayBuffer` 是一种用于表示通用的、固定长度的原始二进制数据缓冲区的方式。当涉及到音频文件的操作时,比如读取、修改或发送音频数据给服务器,`ArrayBuffer` 可以发挥重要作用。 对于希望直接操作音频字节流的应用场景而言,在获取到音频资源之后将其转换成 `ArrayBuffer` 形式是非常有用的。这允许开发者更灵活地处理音轨中的每一个样本点,从而实现诸如剪辑、拼接或是应用特效等功能[^1]。 下面是一个简单的例子来展示如何利用 `wx.request` 接口下载远程音频文件并化为 `ArrayBuffer` 类型: ```javascript // 下载网络上的音频文件作为 ArrayBuffer wx.request({ url: 'https://example.com/path/to/audio.mp3', // 替换成实际链接 method: 'GET', responseType: 'arraybuffer', success(res) { const audioData = res.data; // 此处可以对接收到的数据做进一步加工... processAudio(audioData); }, fail(err){ console.error('Failed to fetch audio:', err); } }); function processAudio(arrayBuffer){ // 对 arrayBuffer 进行具体业务逻辑处理 } ``` 另外,如果目标是在本地录音结束后得到 `ArrayBuffer` 格式的音频内容,则可以通过监听 `recorderManager.onStop()` 方法获得临时路径后加载为 `ArrayBuffer`: ```javascript const recorderManager = wx.getRecorderManager(); let tempFilePath; recorderManager.start({...}); recorderManager.stop(); recorderManager.onStop((res)=>{ tempFilePath = res.tempFilePath; wx.getFileSystemManager().readFile({ filePath: tempFilePath, encoding: '', success (res) { let buffer = res.data; // 即为所需的 ArrayBuffer // 执行后续操作 handleRecordedAudio(buffer); } }); }); function handleRecordedAudio(arrayBuffer){ // 实现对录制完成后的音频数据进行处理的功能 } ``` 值得注意的是,由于不同平台间可能存在兼容性差异以及安全策略限制等因素的影响,在实际项目开发过程中还需要考虑更多细节问题,如错误捕获机制的设计等[^4]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值