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

1 投票
2 回答
3548 浏览
提问于 2025-04-17 06:16

我在尝试编码西里尔字母“Р”时遇到了错误。以下是我的代码和错误信息:

>>> "Р".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

Python的解释器一开始是只支持ASCII字符的模式,所以你不能直接输入西里尔字母(比如俄语字母)。不过,你可以通过它们的代码点数字来创建这些字符:

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

或者通过它们的名字来创建:

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

在Python 2.x中,任何放在""里的东西(比如一个str字符串)其实已经被编码过了。你需要先把它解码成unicode格式,然后才能把它再编码成其他格式。

“Python中的Unicode,完全解密”

撰写回答