Python unicode force转换为ascii(str)

时间:2013-11-16 19:04:04

标签: python django string unicode utf-8

在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'。传统的解码和编码方法在这种情况下可能无效。

1 个答案:

答案 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'