正如标题所示,我有一个原始的chars向量,我需要将其编码为正确的UTF-8字符串,以便可以通过Websocket发送结果。我的意图仅仅是这样做
std::vector<char> data;
// Fill data ..., then
std::string utfData(data.begin(), data.end());
// Finally, send utfData
但是,在浏览器端,它告诉我我的数据不是正确编码的UTF-8字符串。我的逻辑有什么问题,我应该如何将这个vector<char>
转换为UTF8字符串?
如果上面的逻辑似乎正确,那么我将不得不研究其他代码,但是我怀疑问题出在那儿,因为我之前曾使用c ++服务器和javascript客户端发送正常的std :: string对象,而没有出现问题。但是,在接收方,它现在甚至不接收消息,因为它说这不是正确的UTF-8字符串。也就是说,在WebSocket协议级别,它拒绝服务器正在发布的消息。
答案 0 :(得分:4)
您的逻辑对于将向量中的字符复制到字符串中是正确的。
鉴于结果必须为UTF-8,如果源为UTF-8,则程序是正确的。
如果源不是UTF-8,则需要以某种方式转换编码。为了使文本在转换过程中清晰易读,您需要了解源数据的编码,并知道如何执行转换。
如果数据不是文本的,即它是二进制的,那么您可能可以使用例如Base64编码来使其成为有效的UTF-8。当然,您也可以将Base64与文本一起使用,但是文本必须先被解码,然后再以其使用的特定编码进行呈现,然后才能保持可读性。