【问题标题】:Python 3 incorrect output of UTF-8 characters received over WebSocket?通过 WebSocket 接收的 UTF-8 字符的 Python 3 输出不正确?
【发布时间】:2017-04-01 05:45:14
【问题描述】:

我有一个发送 unicode 星号的 javascript。

但 python 将其解释为字母 â - 无论是在控制台还是在日志文件中。

其他 unicode 字符也是格式错误的。

    var ws = new WebSocket("ws://127.0.0.1:8888/");

    ws.onopen= function(){
        console.log('\u2605');

        ws.send('\u2605');

        ws.close();
    }

python中的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import logging, json
from websocket_server import WebsocketServer   

def new_client(client, server):
    print("Client id:"+ str(client["id"])+ " has connected")

def client_left(client, server):
    print("Client id:"+ str(client["id"])+ " has diconnected")

logfile= open('C:/host/test-log.log', 'a', encoding='utf-8')
logging.basicConfig(stream=logfile,
    level=logging.INFO,
    format='%(message)s')     

def msg_rcvd(client, server, msg):
    print (msg);
    logging.info(msg);

server = WebsocketServer(8888, host='127.0.0.1')
server.set_fn_new_client(new_client)
server.set_fn_message_received(msg_rcvd)
server.set_fn_client_left(client_left)

server.run_forever()

使用的 WebsocketServer 库:https://github.com/Pithikos/python-websocket-server

有人知道这里有什么问题吗?

编辑:

刚刚在 git hub 上找到了这个页面:

https://github.com/Pithikos/python-websocket-server/issues/19

这似乎是 lib 问题,一些用户已经发布了解决方案:

bytes([i^masks[idx % 4] for idx, i in enumerate(self.read_bytes(payload_length))]).decode()

但是,我完全不知道将这段代码放在哪里。

非常感谢帮助。

【问题讨论】:

    标签: javascript python windows utf-8 websocket


    【解决方案1】:

    在 WebsocketServer 库代码中:

    decoded = ""
        for char in self.read_bytes(payload_length):
            char ^= masks[len(decoded) % 4]
            decoded += chr(char)
    

    应替换为:

    decoded=bytes([i^masks[idx % 4] for idx, i in enumerate(self.read_bytes(payload_length))]).decode()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2014-04-02
      相关资源
      最近更新 更多