You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用ws包接收WebSocket的ArrayBuffer数据解码出现乱码如何解决

乱码原因

  • 收到的二进制数据不是UTF-8编码的纯文本:如果服务端发送的是protobuf、MessagePack等序列化后的二进制数据,或是经过gzip/deflate压缩的内容,直接用TextDecoder解码必然出现乱码
  • 编码格式不匹配:如果文本内容用了GBK/GB2312等非UTF-8编码,默认用UTF-8解码的TextDecoder会输出乱码
  • ws包数据类型默认配置问题:Node.js环境下ws库默认接收的二进制数据是Buffer类型,而非ArrayBuffer,直接传入TextDecoder虽然兼容但如果数据本身有特殊格式也可能出现异常

解决步骤

  1. 先放开注释的日志,确认接收数据的类型和原始格式:
client.onmessage = (event) => {
  console.log("数据类型:", typeof event.data, Buffer.isBuffer(event.data))
  console.log("原始数据:", event.data)
}
  1. 如果确认是文本但编码非UTF-8,Node.js环境可使用iconv-lite库解码:
const iconv = require('iconv-lite')
// 示例为GBK编码解码,可根据实际编码替换
const ab2str = (buf) => {
  return iconv.decode(Buffer.from(buf), 'gbk')
}
  1. 如果确认数据是经过序列化/压缩的二进制内容,先对应做反序列化、解压操作,再处理文本内容
  2. 如果需要明确接收ArrayBuffer类型,可提前配置ws实例的binaryType:
client.binaryType = 'arraybuffer'

内容的提问来源于stack exchange,提问作者pubir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:45:02