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<char>
转换为 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 发送