我從我的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)後。如果它不起作用,我有另一種理論... –