解决websocket 报 Could not decode a text frame as UTF-8错误

 更新时间:2020年10月09日 09:54:25   作者:Gogym  
这篇文章主要介绍了解决websocket 报 Could not decode a text frame as UTF-8错误,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

当你使用websocket传输数据时,偶尔可能会出现下面的错误

websocket Could not decode a text frame as UTF-8

网上很多其他文章一上来就介绍什么是websocket,数据协议等等,对解决问题没有多大帮助。

有一些文章说要改开头数字10000001等等,很多同学不知所云。

下面说说个人的经验,不一定对,希望对大家有个帮助。

首先如果你使用的是相对成熟的websocket框架的话,一般不会出现这个问题。

而出现这个问题的原因,绝大部分是客户端和服务器端的指定的 “binaryType” 不一致。

要解决问题,首先要弄清楚问题所在,我们先了解一下这个binaryType是什么:

WebSocket.binaryType 返回websocket连接所传输二进制数据的类型。

它有两个值:

 "blob"  如果传输的是 Blob 类型的数据。

"arraybuffer"  如果传输的是 ArrayBuffer 类型的数据。

通常,如果不指定这个值,默认一般是:blob   顾名思义就是任意对象

正常而言,如果binaryType=blob,传输字符串(String)类型,一般没有什么问题。但如果这个时候传一个 byte[] 数组或者二进制数组,可能就会出现Could not decode a text frame as UTF-8 的问题。

对于websocket而言,如果直接传输txt文本。那么opcode一般等于1(opcode是什么可以自行百度)。而直接send byte[] 或者二进制数组时,opcode一般等于2。

当binaryType=blob时,一般会把数据直接当成字符串对象解析,此时如果传递的是byte[]。就会报Could not decode a text frame as UTF-8 的问题。

解决问题:

一般服务器端和客户端指定相同的binaryType即可解决问题。如果传递二进制数据。指定binaryType=arraybuffer,即可获取数据原始二进制数组,这样不管传递的是什么,都不会报错,在自行根据情况处理。

当然,如果是你直接封装的WebSocketFrame,则opcode要指定为二进制

在js中指定:

socket.binaryType='arraybuffer'  

以上这篇解决websocket 报 Could not decode a text frame as UTF-8错误就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    这篇文章主要基于Servlet+JSP+JavaBean开发模式实现JavaWeb用户登录注册功能实例代码,非常实用,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-05-05
  • idea2020.3.3集成maven及遇到的坑(推荐)

    idea2020.3.3集成maven及遇到的坑(推荐)

    这篇文章主要介绍了idea2020.3.3集成maven的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 基于CopyOnWriteArrayList并发容器(实例讲解)

    基于CopyOnWriteArrayList并发容器(实例讲解)

    下面小编就为大家带来一篇基于CopyOnWriteArrayList并发容器(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Spring实战之使用注解实现声明式事务操作示例

    Spring实战之使用注解实现声明式事务操作示例

    这篇文章主要介绍了Spring实战之使用注解实现声明式事务操作,结合实例形式详细分析了spring使用注解实现声明式事务相关配置、接口实现与使用技巧,需要的朋友可以参考下
    2020-01-01
  • Java super关键字用法实战案例分析

    Java super关键字用法实战案例分析

    这篇文章主要介绍了Java super关键字用法,结合具体案例形式分析了java super关键字调用父类构造方法、属性及方法等相关操作技巧与注意事项,需要的朋友可以参考下
    2019-09-09
  • mac安装配置jdk环境变量

    mac安装配置jdk环境变量

    这篇文章主要为大家介绍了mac安装配置jdk环境变量实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 浅谈Java自定义注解和运行时靠反射获取注解

    浅谈Java自定义注解和运行时靠反射获取注解

    下面小编就为大家带来一篇浅谈Java自定义注解和运行时靠反射获取注解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Java数据结构之优先级队列(堆)图文详解

    Java数据结构之优先级队列(堆)图文详解

    优先级队列是比栈和队列更专用的结构,在多数情况下都非常有用,下面这篇文章主要给大家介绍了关于Java数据结构之优先级队列(堆)的相关资料,需要的朋友可以参考下
    2022-03-03
  • Java遍历文件夹及子目录代码实例

    Java遍历文件夹及子目录代码实例

    这篇文章主要介绍了Java遍历文件夹及子目录代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • java生成图片验证码的示例代码

    java生成图片验证码的示例代码

    这篇文章主要介绍了java生成图片验证码的示例代码,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-09-09

最新评论