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

Posted

技术标签:

【中文标题】C++:将 vector<char> 转换为 UTF-8 字符串,以便我可以通过 Websocket 发送【英文标题】:C++: Convert vector<char> to a UTF-8 string so that I can send over a Websocket 【发布时间】:2018-12-14 10:27:26 【问题描述】:

正如标题所示,我有一个原始的字符向量,我需要将其编码为正确的 UTF-8 字符串,以便我可以通过 Websocket 发送结果。我的倾向只是这样做

    std::vector<char> data;

    // Fill data ..., then 

    std::string utfData(data.begin(), data.end());

    // Finally, send utfData

但是,在浏览器端,它告诉我我的数据不是正确编码的 UTF-8 字符串。我的逻辑有什么问题,我应该如何将此 vector&lt;char&gt; 转换为 UTF8 字符串?

如果上面的逻辑似乎正确,那么我将不得不调查其他代码,但我怀疑问题出在哪里,因为我之前使用 c++ 服务器和 javascript 客户端发送正常的 std::string 对象没有问题.但是,在接收端,它现在甚至不会收到消息,因为它说它不是正确的 UTF-8 字符串。也就是说,在 WebSocket 协议级别,它拒绝了我的服务器正在发布的消息。

【问题讨论】:

这可能毫无意义。 char 的向量已经根据 some 编码进行了编码。一开始可能是 UTF-8。 从什么转换成UTF-8? 这只是原始数据。没有编码。但是我们不能假装编码是 ANSI 扩展的吗? 您需要知道初始编码才能转换为 utf-8。 向量中的每个元素都是一个字符。假设您希望使用任何扩展的 ANSI 编码。 【参考方案1】:

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

鉴于结果需要是UTF-8,如果源是UTF-8,那么程序是正确的。

如果源不是 UTF-8,那么您需要以某种方式转换编码。为了通过转换保持文本清晰,您需要知道源数据的编码,知道如何执行转换。

如果数据不是文本的,即它是二进制的,那么您可以使用例如 Base64 编码使其成为有效的 UTF-8。当然,您也可以将 Base64 与文本一起使用,但文本在被解码并以它使用的特定编码呈现之前不会保持可读性。

【讨论】:

啊哈... base64 可能是我一直在寻找的答案。这是二进制数据。 我以前用过这个,现在忘记了。让我调查一下。

以上是关于C++:将 vector<char> 转换为 UTF-8 字符串,以便我可以通过 Websocket 发送的主要内容,如果未能解决你的问题,请参考以下文章

C++ - 将 char 引用转换为 bool 引用(std::vector<bool>)

Swig:将 std::vector<unsigned char> 传递给从 c++ 生成的 c# 函数

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

在 C++ 中将 const vector<uint8_t> 转换/转换为 const vector<char>

c++ vector<char> 和套接字

std::vector<std::string> 到 char* 数组