微信小程序 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) | 0x80);bytes.push((c & 0x3F) | 0x80);}else if(c >= 0x000800 && c <= 0x00FFFF){bytes.push(((c >> 12) & 0x0F) | 0xE0);bytes.push(((c >> 6) & 0x3F) | 0x80);bytes.push((c & 0x3F) | 0x80);}else if(c >= 0x000080 && c <= 0x0007FF){bytes.push(((c >> 6) & 0x1F) | 0xC0);bytes.push((c & 0x3F) | 0x80);}else{bytes.push(c & 0xFF);}}var array = new Int8Array(bytes.length);for(var i in bytes){array[i] =bytes[i];}return array.buffer;
}
function arrayBufferToString(arr){if(typeof arr === 'string') {  return arr;  }  var dataview=new DataView(arr.data);var ints=new Uint8Array(arr.data.byteLength);for(var i=0;i<ints.length;i++){ints[i]=dataview.getUint8(i);}arr=ints;var str = '',  _arr = arr;  for(var i = 0; i < _arr.length; i++) {  var one = _arr[i].toString(2),  v = one.match(/^1+?(?=0)/);  if(v && one.length == 8) {  var bytesLength = v[0].length;  var store = _arr[i].toString(2).slice(7 - bytesLength);  for(var st = 1; st < bytesLength; st++) {  store += _arr[st + i].toString(2).slice(2);  }  str += String.fromCharCode(parseInt(store, 2));  i += bytesLength - 1;  } else {  str += String.fromCharCode(_arr[i]);  }  }  return str;
}

参考文章

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

  1. 微信小程序JS 字符串string与arraybuffer的相互转换

    写微信小程序用udp与服务器通信时message只可以用string和arraybuffer类型,我用了arraybuffer类型,此时涉及到string与arraybuffer的相互转换故记录所用函 ...

  2. 微信小程序JS字符串操作方法汇总

    微信小程序JS字符串操作方法汇总 JS对字符串进行切割截取 1.函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: str="jpg|bmp|gif|ico| ...

  3. 微信小程序JS字符串操作方法汇总,包含切割截取split,合并字符串join,连接字符串concat,返回指定字符串charAt,提取字符串substring等

    微信小程序JS字符串操作方法汇总 JS对字符串进行切割截取 1.函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: str="jpg|bmp|gif|ico| ...

  4. 微信小程序js 字符串截取

    微信小程序js 字符串截取 console.log(time) 输出:qwertyuiop console.log(time.substring(0, 5)) 输出:qwert

  5. 微信小程序--js中string转换为number

    问题描述 在小程序编写js代码时,经常会遇到类型转换,比如string类型的"3"转换为number类型的3,那么怎么转换呢?先了解 parseInt!!! parseInt 1. ...

  6. 微信小程序业务-字符串生成二维码(weapp-qrcode)

    微信小程序业务-字符串生成二维码(weapp-qrcode) 前言 邂逅weapp-qrcode 基本使用 详细参数 小程序组件中使用 image属性详解 想使用网络图片? 参考地址 前言 在小程序项 ...

  7. 【Note】微信小程序js使用农历(一行代码)

    [Note]微信小程序js使用农历 0 直接输出 var data_ = new Date('2022/10/27 00:00:00') console.log(data_.toLocaleStrin ...

  8. 微信小程序js把数字转化成字母

    微信小程序 js 把数字转化成字母 微信小程序 js 把数字转化成字母 for (let i = 0; i < 26; i++) {list[i] = {};list[i].name = Str ...

  9. 微信会员卡html修改样式模板,微信小程序 JS动态修改样式的实现代码

    微信小程序这个坑啊,js动态修改样式,我们并不能用js或者jq 轻轻松松一行代码搞定.或者用removeClass addClass 来修改样式. 以下是一种动态修改样式的方法,原理是绑定数据,然后动 ...

最新文章

  1. 加来道雄 基因编辑 纳米机器人_浙大专家把螺旋藻制成微纳机器人,可通过光合作用靶向治疗肿瘤...
  2. Java开发知识点!手把手讲解-一个复杂动效的自定义绘制
  3. VS2013(Visual Studio 2013)官方中文旗舰版安装激活方法
  4. hdu 3333 树状数组+离线处理
  5. ASP.NET中JSON的序列化和反序列化
  6. jquery绑定元素id事件_JQuery绑定click事件的3种写法
  7. 找不到在标准的SAP C4C system字段里新增entry的办法
  8. python程序中想使用正则表达式_python中正则表达式的使用方法
  9. php 生成树,PHP超牛逼无限极分类生成树方法
  10. nyoj1052 看美女2
  11. 第三讲 地理空间数据的组成与特征
  12. android常用刷机指令,【高级技术】Android刷机常用adb指令集合
  13. 单相无感正弦驱动方案
  14. 丢失MSVCR71.dll问题解决
  15. 谁是赢家,某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票和 3 名评委投票两部分共同决定。规则为:如果一艺人的观众票数高,且得到至少 1 名评委的认可,该艺人就胜出;
  16. 大学生如何应聘高薪IT职位
  17. 小学计算机教室使用汇报材料,勃李小学“教育信息化示范学校”汇报材料
  18. ctfshow-WEB-web2
  19. 2021年新版本下载钉钉群直播回放视频方法介绍
  20. 怎么样在应用中实现自助报表功能

热门文章

  1. ROS2机器人笔记20-08-18
  2. Docker部署Sentry
  3. 【图片新闻】据称俄罗斯核动力巡航导弹研制疑似遭遇挫折
  4. java增强for循环原理
  5. Dubbo和Zookeeper入门到实战,看这篇就够了
  6. 使用C语言实现字符串逆序操作
  7. python 本地解析IP地址所属地区信息
  8. 返回一个整数数组中最大子数组的和(升级版)
  9. UE4/5C++模块与插件
  10. LTE RLC/MAC层作用学习