无法在python 2.7.x中编码西里尔字符

时间:2011-11-14 03:35:19

标签: python encoding character-encoding

当我尝试编码西里尔字母“Р”字符时,我收到错误。这是我的代码和错误:

>>> "Р".encode('utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)

如何解决它。请帮我。我正在使用Python 2.7.x.谢谢你的一切建议。

编辑:

def _to_unicode_or_bust(self, obj, encoding='utf-8'):
    if isinstance(obj, basestring):
        if not isinstance(obj, unicode):
            obj = unicode(obj, encoding)
    return obj

我从演示中获得了上述方法。它在终端和简单的python文件中工作。它在OpenERP中无效。

2 个答案:

答案 0 :(得分:2)

Python 2.x中""(例如str)中的任何内容都已编码。您需要将其解码为unicode,然后才能将其编码为其他内容。

"Unicode In Python, Completely Demystified"

答案 1 :(得分:0)

Python的解释器以ascii-only模式启动,因此您无法直接输入Cyrllic字符。相反,您可以通过代码点编号创建它们:

>>> print unichr(0x420)
Р
>>> unichr(0x420).encode('utf-8')
'\xd0\xa0'

或通过他们的名字:

>>> u'\N{CYRILLIC CAPITAL LETTER ER}'.encode('utf-8')
'\xd0\xa0'