oatpp-websocket发送UTF-8字符串遇问题:中文显示乱码求助
oatpp-websocket中文乱码解决方案(支持UTF-8)
oatpp-websocket完全支持UTF-8,你的乱码问题出在字符串转换或发送环节,以下是针对性解决方法:
修正QString转oatpp::String的方式
直接使用QString::toUtf8().constData()存在临时对象生命周期风险,可能导致oatpp::String拿到无效指针。正确做法是先保存UTF-8字节数组,再初始化oatpp::String:QString chineseMessage = " 我是 join in "; QByteArray utf8Bytes = chineseMessage.toUtf8(); // 显式传入字节长度,确保完整读取UTF-8数据 oatpp::String utf8Message(utf8Bytes.constData(), utf8Bytes.size()); room->sendMessage(utf8Message);移除多余的Content-Type头
WebSocket协议握手响应不需要Content-Type头,你添加的该头属于无效设置,直接删除:// 删掉这行代码 // response->putHeader("Content-Type", "text/plain; charset=utf-8");确保发送文本帧而非二进制帧
确认你的room->sendMessage内部是按WebSocket文本帧(OPCODE_TEXT)发送数据。如果是自定义的room实现,可显式指定帧类型:// 若直接操作WebSocket连接对象 webSocket->send(utf8Message, oatpp::websocket::Frame::OPCODE_TEXT);浏览器端接收校验
确保浏览器端按文本类型处理消息,避免二进制解析错误:ws.onmessage = (event) => { // 文本帧直接输出 if (typeof event.data === 'string') { console.log(event.data); } else { // 二进制数据手动转UTF-8 const decoder = new TextDecoder('utf-8'); console.log(decoder.decode(event.data)); } };
内容的提问来源于stack exchange,提问作者Mr.Wu
相关产品推荐
相关产品推荐

