收藏
回答

微信小程序不支持TextDecoder

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 微信iOS客户端 6.5.3 2.25.0
// 将十六进制字符串转中文: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
}
回答关注问题邀请回答
收藏

6 个回答

登录 后发表内容