在django中使用post时,ascii字符串将自动转换为unicode字符串。 例如:
s = '\xe2\x80\x99'
是str类型字符串。 (这是utf-8格式)
将此字符串发布到django,然后从request.POST获取它,它将被转移到unicode字符串:
u'\xe2\x80\x99'
这可能会导致解码/编码错误,因为python认为它是一个unicode字符串,但实际上它是一个utf-8字符串。
我的问题是如何FORCE将unicode字符串转换为ascii字符串?这意味着只需从u'\ xe2 \ x80 \ x99'中删除前'u'到'\ xe2 \ x80 \ x99'。传统的解码和编码方法在这种情况下可能无效。
答案 0 :(得分:3)
当收到请求时,响应的编码被错误地声明为(可能)iso-8859-1
,或者可能根本没有声明,并且默认为该编码。网站应使用标题正确声明其编码:
<headers>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</headers>
但如果这不在您的控制之下,您可以撤消编码并正确解码:
>>> s = u'\xe2\x80\x99'
>>> s.encode('iso-8859-1')
'\xe2\x80\x99'
>>> s.encode('iso-8859-1').decode('utf8')
u'\u2019'