【问题标题】:Python unicode force convert to ascii (str)Python unicode 强制转换为 ascii (str)
【发布时间】:2013-11-30 02:37:46
【问题描述】:

在 django 中使用 post 时,一个 ascii 字符串会自动转换成 unicode 字符串。 例如:

s = '\xe2\x80\x99'

是 str 类型的字符串。 (是utf-8格式)

当post这个字符串到django,然后从request.POST中获取,它会被转成unicode字符串:

u'\xe2\x80\x99'

这可能会导致解码/编码错误,因为python认为它是一个unicode字符串,但实际上它是一个utf-8字符串。

我的问题是如何将 unicode 字符串强制转换为 ascii 字符串?这意味着只需将前 'u' 从 u'\xe2\x80\x99' 删除到 '\xe2\x80\x99'。在这种情况下,解码和编码等传统方法可能无法正常工作。

【问题讨论】:

  • 你为什么不能只做mystr.decode("utf8")
  • 您需要添加更多细节。特别是,您如何将该字符串发布到 Django?您的 HTML 是什么样的,您的 HTTP 请求使用什么编码?

标签: python django string unicode utf-8


【解决方案1】:

在接收请求时,响应的编码被错误地声明为(可能)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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 2017-06-20
    相关资源
    最近更新 更多