我使用以下函数将字节编码为 utf-8
func convrtToUTF8(origin []byte) []byte {
byteReader := bytes.NewReader(origin)
reader, _ := charset.NewReaderLabel("utf-8", byteReader)
strBytes, _ = ioutil.ReadAll(reader)
return strBytes
}
如何将 strByte 转换为原点?
详
Origin Bytes来自Flatbuffers的Builder。DoneBytes(( 我必须将其转换为 utf-8 字节才能在 websocket 连接中使用(因为浏览器发出错误,例如失败:无法将文本框架解码为 UTF-8(
您提供的代码似乎从 UTF-8 转换为 UTF-8:
NewReaderLabel 返回一个读取器,该读取器从指定的字符集转换为 UTF-8。它使用 Lookup 查找与 label 对应的编码,如果 Lookup 返回 nil,则返回错误。 来源: GoDoc
您不是在检查返回的错误,但是将任意二进制解码为UTF-8编码的文本肯定会产生错误。
更重要的是,您要发送二进制数据,不要像文本一样将其编码为 UTF-8。要通过 websocket 发送,请将数据保留为二进制:
数据帧(例如,非控制帧(由操作码标识 其中操作码的最高有效位为 0。 当前定义 数据框的操作码包括0x1(文本(、0x2(二进制(。 操作码 0x3-0x7保留给尚未确定的更多非控制帧 定义。
来源: RFC 6455
例如,如果您使用的是 github.com/gorilla/websocket
,则应使用 messageType
参数的BinaryMessage
从 websocket 读取/写入。
WebSocket 协议区分文本和二进制数据消息。文本消息被解释为 UTF-8 编码的文本。二进制消息的解释留给应用程序。
此包使用文本消息和二进制消息整数常量来标识两种数据消息类型。ReadMessage 和 NextReader 方法返回收到的消息的类型。WriteMessage 和 NextWriter 方法的 messageType 参数指定已发送消息的类型。
来源: GoDoc