从html表单编码utf-8

亨利·M

我有一个Python / Django程序,当前正在运行一些希腊字符。我遇到以下错误的问题:'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

在这行代码上

if l.answer == str(request.POST.get('resp_162')).encode('utf-8'):

输入是Μεξικό。显然,它不喜欢带重音符号的o。

我已经阅读了文档,但我真的不明白

布鲁诺·德斯胡里尔斯

request.POST.get('resp_162')将返回一个unicode对象(unicode字符串)-或,None但是,那是另一个问题。还有,你可以将其转换为两种方式str对象(字节字符串):通过将其传递给str-即str(request.POST.get('resp_162'))-由它编码为一个字节串编解码器使用unicode.encode(...),即request.POST.get('resp_162').encode("utf-8")第一个解决方案将使用“ ascii”编解码器,第二个解决方案将使用您要求的编解码器。

由于您是第一次unicode字符串传递到,str并且该字符串包含非ASCII字符,因此您UnicodeEncodeError在这一点上会得到一个IOW:只需使用第二种解决方案,您就不会出错。

这就是说:在内部,Django仅使用unicode字符串(用于从模型,表单,请求等中获得的信息),唯一明智的方法是在所有地方坚持使用unicode字符串(在系统输入处解码字节字符串并将其编码为系统输出中所需的编码)。我不知道l.answer您的代码段中有什么内容,但是如果“ l”(非常糟糕的命名选择FWIW)是一个模型实例和.answer一个文本字段,则它已经是一个unicode字符串,因此您实际上不应该尝试将其设置为字节字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章