【问题标题】:Could not decode a text frame as UTF-8.无法将文本帧解码为 UTF-8。
【发布时间】:2013-06-12 03:36:06
【问题描述】:

现在我一直在努力修复这个错误,但我不知道如何修复它,我已经搜索并找到了解决方案,但它并不完全是问题的解决方案。

每次我在聊天应用程序中“进入房间”时,我都会因“无法将文本帧解码为 UTF-8”而断开连接。

  • 我将所有命令发送到 WebSocket 服务器(在 PHP 中作为 json 格式)

我通过 WebSocket (ws://....) 发送的命令是:

  {"command": "roomchange", "data" : "14"}

我的 php websocket 服务器处理请求并发送回导致问题的请求:

{"command" : "NEWUSER","data" : { "mood" : "tired", "apartment" : "0","username" : "tester","seat_id" : "7","room_id" : "14","gender" : "male", "face" : "", "hair" : "http://xxx.dk/framework/gfxs/avatars/male/hair/d0fc74a351b05cae75258e93422c040e.png", "shoes" : "http://xxx.dk/framework/gfxs/avatars/male/shoes/00708715be7e7c007fca457eb5573637.png", "clothes" : "http://xxx.dk/framework/gfxs/avatars/male/shirts/9401f96ed9d6ad43c5d5ad7352e50de2.png"}}

也许是这样的:

  {"command": "roombg","data" : { "id" : "14", "background" : "new.png", "name" : "Diskotek"}}

当我在 php 中向我的 websocket 服务器发送请求时,我有这个

return unescape( encodeURIComponent( JSON.stringify( COMMAND ) ) )

是不是因为 websocket 发回了 URL?或者是什么问题?

【问题讨论】:

  • 我认为您不需要在这里转义或 URI 编码任何内容。使用 JSON.stringify 足以将 JSON 对象发送到 WebSocket 服务器。

标签: php javascript sockets websocket


【解决方案1】:

这听起来像是您正在使用的 PHP WebSocket 服务器中的一个错误。这表明服务器没有正确构造 WebSocket 帧,它包含非 UTF8 数据,或者服务器将消息拆分为两个帧,并且 UTF-8 数据在多字节字符编码的中间被拆分。

另外,您不需要escape(encodeURIComponent(STRING))JSON.stringify 的结果应该已经可以安全地作为 WebSocket 消息发送了。

【讨论】:

  • 好的,那么在这种情况下怎么办?
  • 您使用的是哪个 PHP WebSocket 服务器?最好的办法可能是尝试另一个 PHP WebSocket 服务器和/或针对您当前使用的服务器提交一个错误。
【解决方案2】:

这是一个古老的主题,但如果人们确实搜索类似的错误,我会在这里给出答案。

最近我遇到了一个 php websocket 服务器的问题,chrome 中的 javascript 客户端关闭了连接说“无法将文本帧解码为 UTF8”。

我在网上搜索以找到答案,并尝试了不同的回复,说要替换坏的 utf8 字符,或者使用 encodeURI 或使用 unescape 等...

但在阅读了 websocket 规范的一部分后,我检查了 php 服务器上的帧发送。我看到对于 126 字节以下的帧长度它工作得很好,但是对于超过 126 字节的帧,它会在客户端产生一个错误。 经过一点帧检查后,我发现帧的长度以小端顺序存储,或者根据规范中的示例,帧长度需要以大端顺序存储。

因此,在为长度设置正确的字节序后,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2023-03-10
    • 2011-01-01
    • 2021-03-22
    • 2020-04-07
    相关资源
    最近更新 更多