我从我的HTML表单数据有一个ASCII字符,当我FlaskApp处理的字符,它给了我这样的错误:的request.form包含ASCII字符
- UnicodeEncodeError:“ASCII”编解码器“T编码字符U” \ XF1' 在位置2:顺序不在范围内(128)
相信我必须改变我的应用程序的东西,例如,对请求进行解码的形式,但我不能t找到一个方法来做到这一点。
这里是代码:
HTML
<body>
<div id="avisos">
<form action="/opcion/avisos_cadastrar/resultado" method="post"> <br>
<fieldset>
<legend> Aviso </legend>
<center> <h3> Cadastrar </h3> </center>
<br>
Titulo: <input type="text" name="titulo" maxlength="32" autocomplete='off'> </input>
<textarea name="aviso" id="text-area" rows="10" cols="50" maxlength="512" autocomplete='off'> </textarea>
<br>
<input type=submit value="enviar">
<script>
var area = document.getElementById("text-area");
var message = document.getElementById("message");
var maxLength = 512;
var checkLength = function() {
if(area.value.length <= maxLength) {
message.innerHTML = (maxLength - area.value.length) + " caracteres restantes.";
}
}
setInterval(checkLength, 150);
</script>
</fieldset>
</form>
</div>
</body>
FlaskApp
@app.route("/opcion/avisos_cadastrar/resultado", methods = ['POST'])
def avisos_cadastrar_resultado():
__titulo = request.form['titulo']
__aviso = request.form['aviso']
query_insert_aviso = " INSERT INTO tjs_stage.avisos (Titulo, Aviso) VALUES ('{} ', '{} ')" .format(__titulo,__aviso)
cur.execute(query_insert_aviso)
con.commit()
return render_template('resultado.html')
我试图用类似..
__titulo = request.form['titulo'].decode("utf-8")
__aviso = request.form['aviso'].decode("utf-8")
...和也。 ..
__titulo = request.form['titulo'].decode("raw_unicode_escape")
__aviso = request.form['aviso'].decode("raw_unicode_escape")
...但它没有奏效。
也许在我的HTML或FlaskApp中可能丢失了某些东西,但我有点失落。
难道你们中的任何一个人都能帮我一把吗?
TSM :)!
追溯表明你的错误实际上来自你设置'__titulo'和'__aviso'值的行吗?似乎更可能来自'cur.execute()'。在使用表单中的数据执行SQL查询时,您还需要小心。您应该转义该数据以防止来自恶意用户的任何潜在SQL注入攻击。 –
不错的提示@TylerS,非常感谢。我没有想过SQL注入的可能性。我会改进这一点。谢谢!关于Traceback ..当html表单包含字符Ñ时,它真的会产生。我使用Python 2.7.6,默认情况下使用ASCII编码。显然,Ñ不是ASCII表格所能识别的字符。我不得不承认我从来没有经历过这种情况.. – ivanleoncz
不客气,不要忘记给点小情愿爱;)关于编码,我不认为这是一个普通的python问题,我认为它与你使用的一个软件包有关脚本。 Python与unicode很好玩,但请注意这一点。在脚本的顶部:'import sys'然后'reload(sys)',最后是'sys.setdefaultencoding('utf-8')'per [this](http://geekforbrains.com/post/setting-the -default-encoding-in-python)后。如果它不起作用,我有另一种理论... –