You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:51:07