无法在Python 2.7.x中编码西里尔字符
我在尝试编码西里尔字母“Р”时遇到了错误。以下是我的代码和错误信息:
>>> "Р".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
格式,然后才能把它再编码成其他格式。