2016-11-01 3 views
0

Я пытаюсь преобразовать обычную строку в специальный символ, чтобы возделывать его в моей логике в питона 2.Unicode в строки Python 2

word = 'Tb\u03b1' 
word = unicode('Tb\u03b1') 

if word.encode('utf-8') == u'Tb\u03b1'.encode('utf-8'): 
    print 'They are equals' 

print word.encode('utf-8') 
print type(word.encode('utf-8')) 
print u'Tb\u03b1'.encode('utf-8') 
print type(u'Tb\u03b1'.encode('utf-8')) 

Я получаю этот ответ

Tb\u03b1 
<type 'str'> 
Tbα 
<type 'str'> 

Мои вопрос ... Когда я применяю метод unicode к слову, я не должен иметь такой же ответ в строках 1 и 3? Я хотел бы получить строку 3, потому что мне нужно сделать некоторую логику на основе этого специального символа.

+0

Почему у вас есть строка '' Tb \ u03b1''? Вы уверены, что это то, что у вас есть в вашей реальной программе? Существует не так много разумных способов, чтобы вы могли получить эту строку, и вам, вероятно, следует изменить любой код, создающий ее, вместо того, чтобы пытаться выполнить пост-обработку вывода. – user2357112

+0

Не знаете, что вы хотите, вы уже знаете, как получить строку 3. – Goyo

+0

Он поступает как «строка» из json-файла, такого как '{'word': 'Tb \ u03b1'}'. Однако unicode не важен для меня, но это особый символ, который он пытается представить. Этот юникод может быть в любой части строки (начало, конец, конец). Поэтому я хочу преобразовать эту строку, исходящую из json в качестве переменной, в реальное строковое представление – user2288043

ответ

1

Проблема заключается в том, что \u не имеет специального значения в литерале, отличном от юникода, поэтому в вашей строке остается \u. Для интерпретации \u побегов и получить соответствующий Unicode, использовать кодировку "unicode_escape":

>>> as_str = "\u03b1" 
>>> as_unicode = as_str.decode(encoding="unicode_escape") 
>>> print as_unicode 
α 

Но вы бы лучше, если вы могли бы выяснить способ, чтобы избежать в этой ситуации. Еще лучше, переключитесь на Python 3, где эти вещи имеют больший смысл.

+0

То, что мне нужно. Благодаря!. Я буду принимать во внимание ваш совет :) – user2288043