我有一个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] 删除。
我来说两句