C ++:将vector <char>转换为UTF-8字符串,以便可以通过Websocket发送

时间:2018-12-14 10:27:27

标签: c++ utf-8 websocket

正如标题所示,我有一个原始的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协议级别,它拒绝服务器正在发布的消息。

1 个答案:

答案 0 :(得分:4)

您的逻辑对于将向量中的字符复制到字符串中是正确的。

鉴于结果必须为UTF-8,如果源为UTF-8,则程序是正确的。

如果源不是UTF-8,则需要以某种方式转换编码。为了使文本在转换过程中清晰易读,您需要了解源数据的编码,并知道如何执行转换。

如果数据不是文本的,即它是二进制的,那么您可能可以使用例如Base64编码来使其成为有效的UTF-8。当然,您也可以将Base64与文本一起使用,但是文本必须先被解码,然后再以其使用的特定编码进行呈现,然后才能保持可读性。