【问题标题】:Problem with special characters in flask python烧瓶python中的特殊字符问题
【发布时间】:2019-09-13 21:55:02
【问题描述】:

我已经按照this 教程获得了一个正在运行的服务器进行聊天,但我仍然遇到问题:

它不接受带有西班牙口音或 ñ、á、é、ó、...的文本

有人知道要在代码中添加什么来使特殊字符起作用吗?

我尝试将 html 模板的第二行从 <html lang="en"> 更改为 <html lang="es">,但没有成功。 ¿我应该将每个文本输入都传递给 utf8 还是创建一个字典来将字符串转换为正确的字符?

这是代码:

from flask import Flask, render_template
from flask_socketio import SocketIO    
app = Flask(__name__)
app.config['SECRET_KEY'] = 'vnkdjnfjknfl1232#'
socketio = SocketIO(app)    
@app.route('/')
def sessions():
    return render_template('session.html')    
def messageReceived(methods=['GET', 'POST']):
    print('message was received!!!')

@socketio.on('my event')
def handle_my_custom_event(json, methods=['GET', 'POST']):
    print('received my event: ' + str(json))
    socketio.emit('my response', json, callback=messageReceived)

if __name__ == '__main__':
    socketio.run(app, debug=True,host='0.0.0.0', port=1234)

y el archivo plantilla que carga es

 <!DOCTYPE html>
  <html lang="es">
  <head>
    <title>Flask_Chat_App</title>
  </head>
  <body>

<h3 style='color: #ccc;font-size: 30px;'>Bienvenidos..</h3>
<div class="message_holder"></div>

<form action="" method="POST">
  <input type="text" class="username" placeholder="Nombre"/>
  <input type="text" class="message" placeholder="Mensaje"/>
  <input type="submit"/>
</form>

<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
<script type="text/javascript">
  var socket = io.connect('http://' + document.domain + ':' + location.port);
  socket.on( 'connect', function() {
    socket.emit( 'my event', {
      data: 'User Connected'
    } )
    var form = $( 'form' ).on( 'submit', function( e ) {
      e.preventDefault()
      let user_name = $( 'input.username' ).val()
      let user_input = $( 'input.message' ).val()
      socket.emit( 'my event', {
        user_name : user_name,
        message : user_input
      } )
      $( 'input.message' ).val( '' ).focus()
    } )
  } )
  socket.on( 'my response', function( msg ) {
    console.log( msg )
    if( typeof msg.user_name !== 'undefined' ) {
      $( 'h3' ).remove()
      $( 'div.message_holder' ).append( '<div><b style="color: #000">'+msg.user_name+'</b> '+msg.message+'</div>' )
    }
  })
</script>

【问题讨论】:

    标签: python flask


    【解决方案1】:

    这里的问题不在于内容语言,而在于内容编码。确保您的代码和模板文件使用 UTF-8,并在打开 &lt;html&gt; 标记后立即添加 &lt;meta charset="utf-8" /&gt; 标记:

    <!DOCTYPE html>
    <html>
        <meta charset="utf-8" />
        ...
    

    【讨论】:

    • 这句话允许我使用ñ,á,é,.. 设置标题,但不能设置通过应用程序发送的消息。我认为 &lt;form action="" method="POST"&gt; &lt;input type="text" class="username" placeholder="Nombre"/&gt; &lt;input type="text" class="message" placeholder="Mensaje"/&gt; &lt;input type="submit"/&gt; &lt;/form&gt; 中缺少一些想法
    • 您的 Python 源代码也应该使用 UTF-8 进行编码。还要检查数据库中数据的编码(如果你使用的话)。
    猜你喜欢
    • 2021-06-29
    • 2018-07-28
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多