从客户端收到'utf-8'的问题

问题描述 投票:1回答:3

我正在尝试使用Flasksocket.io在服务器和客户端之间创建双向通信。

一切正常,直到服务器从客户端收到utf-8字符串,这会出现乱码。从服务器发送到客户端工作正常,在从客户端发送到服务器之前,客户端正确打印消息。

以下是一些可以重现问题的代码:

app.朋友:

import flask
from flask_socketio import SocketIO, emit, disconnect

import json

app = flask.Flask(__name__)
socket_io = SocketIO(app)

@socket_io.on('pull')
def socket_io_handle_pull():
    json_msg = {
        'msg': "abcćčddžđefghijklmnnjoprsštuvzž"
    }
    print("Pushing", json_msg)

    socket_io.emit('response', json_msg)

@socket_io.on('push')
def socket_io_handle_push(json_msg):
    print("Pushed:", json_msg)

@socket_io.on('disconnect')
def socket_io_handle_disconnect():
    disconnect()

@app.route('/')
def root():
    return flask.render_template(
        'index.html'
    )

if __name__ == '__main__':
    socket_io.run(app)

index.html的:

<!DOCTYPE html>
<html>
  <head>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
  </head>
  <body>
    <script type="text/javascript">
      var socket = io.connect('http://' + document.domain + ':' + location.port);

      socket.on('response', json => {
        socket.emit('push', json);
      })

      socket.emit('pull');
    </script>
  </body>
</html>

输出:

Pushing {'msg': 'abcćčddžđefghijklmnnjoprsštuvzž'}
Pushed: {'msg': 'abcÄ\x87Ä\x8dddA3Ä\x91efghijklmnnjoprsA!tuvzA3'}
python flask socket.io flask-socketio
3个回答
1
投票

您正在使用1.x版本的Socket.IO客户端,其中known problems具有UTF-8字符串的双重编码。您应该尝试解决此问题的2.x版本。


0
投票

似乎我回来了使用mojibake解码并用latin-1编码的utf-8

为了解决这个问题,我补充道:

json_str = json_str.encode('latin-1').decode('utf-8')

如果您遇到此问题,请查看Miguel's answer


0
投票

我使用反向代理服务器socket.io js文件,通过添加socket.io.js反向代理路径结束,如xxx.com/reverse_proxy_path/socket.io

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.