【问题标题】:python encoding from str to unicode从str到unicode的python编码
【发布时间】:2014-04-07 09:32:14
【问题描述】:

我有一个非常简单的环境:

In [64]: aa = '\xe1'

In [65]: aa
Out[65]: '\xe1'

In [66]: type(aa)
Out[66]: str

In [67]: u'\xe1'
Out[67]: u'\xe1'

In [68]: u'%s' % aa
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
/usr/lib/python2.7/dist-packages/django/core/management/commands/shell.pyc
in <module>()
----> 1 u'%s' % aa

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 0:
ordinal not in range(128)

我想做的就是把这个 aa 字符串转换成 unicode。我怎么能这样做?

在 db 中我有 unicode 字符串,如果 str 包含特殊字符,我无法生成结果 django 查询。使用 .encode('utf-8')unicode(aa) 我得到了相同的 UnicodeDecodeError

我也尝试过使用sys.setdefaultencoding,然后它可能会起作用,但它会杀死其他所有东西。

Python 版本:2.7.3

【问题讨论】:

  • 每当我在 python 中处理 unicode 时,我倾向于参考:farmdev.com/talks/unicode 这是迄今为止我见过的如何在 python 2.7 中处理 unicode 的最佳解释。祝你好运

标签: python django unicode encoding


【解决方案1】:

如果你连接不同编码的字符串,python 默认使用 ascii 来解码字符串。 在您的情况下,这显然是错误的编码。

您的aa 是一个unicode á

>>> print u'\xe1'
á

如果您将aa 作为 unicode 传递,它将起作用

>>> aa = u'\xe1'
>>> u'%s' % aa
u'\xe1'

>>> print u'%s' % aa
á

您不能将'\xe1' 视为utf-8,因为它在utf-8 中无效,因此您无法对其进行解码。

>>> '\xe1'.decode('utf-8')
...

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe1 in position 0: unexpected end of data

回溯中的重要部分是:unexpected end of data

【讨论】:

    【解决方案2】:

    试试这个:

    aa.decode('latin-1')
    

    unicode('\xe1', 'latin-1')
    

    '\xe1'(225 作为 int)不是 ascii 的一部分,因此,为了将您的字符串转换为 unicode 实例,您必须指定原始字符串中使用的编码。

    我的示例假设您的原始字符串是 latin-1。也许您正在使用另一种编码,您必须找出它是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 2012-04-10
      • 2013-08-04
      • 2016-08-19
      • 2011-03-14
      • 2013-09-10
      • 2018-01-14
      相关资源
      最近更新 更多