2015-01-02 2 views
1

Я надеялся использовать unicode вместо str для всех строк в моем проекте. Я пытаюсь использовать метод str.encode, но не могу понять из документации, что метод encode точно выполняет или ожидает в качестве входных данных.Что ожидает str.encode как вход?

Греческая маленькая буква pi U + 03C0, а при кодировании в UTF-8 - 0xCF 0x80. Я получаю следующее:

>>> s1 = '\xcf\x80' 
>>> s1.encode('utf-8','ignore') 

Traceback (most recent call last): 
    File "<pyshell#61>", line 1, in <module> 
    s1.encode('utf-8','ignore') 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xcf in position 0: ordinal not in range(128) 

Я попробовал его на:

>>> s2='\x03\xc0' 

>>> s2.encode('utf-8','ignore') 

Traceback (most recent call last): 
    File "<pyshell#62>", line 1, in <module> 
    s2.encode('utf-8','ignore') 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc0 in position 1: ordinal not in range(128) 

Что encode ожидать в качестве входных данных, и почему вариант «игнорировать» не игнорировать ошибку? Я попробовал «заменить», и это также не скроет ошибку.

ответ

3

В Python 2.x, str является байтовой строкой (закодированной). Вы можете расшифровать его в объект Юникод:

>>> s1 = '\xcf\x80' # string literal (str) 
>>> s1.decode('utf-8') 
u'\u03c0' 

Юникода объекта, вы можете сделать закодировать:

>>> u1 = u'\u03c0' # unicode literal (unicode) U+03C0 
>>> u1.encode('utf-8') 
'\xcf\x80' 
Смежные вопросы