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