2016-06-07 3 views
-1

Я переношу свой код на python 3 с сохранением обратной совместимости.Python 3 как преобразование строк в python 2

Функция str в python 2 и python 3 преобразует строки с символами не ascii по-разному. Например:

Python 2:

In [4]: str('Alnus viridis (Chaix) DC. ssp. sinuata (Regel) A. Löve & D. Löve') 
Out[4]: 'Alnus viridis (Chaix) DC. ssp. sinuata (Regel) A. L\xc3\xb6ve & D. L\xc3\xb6ve' 

Но в Python 3:

In [1]: str('Alnus viridis (Chaix) DC. ssp. sinuata (Regel) A. Löve & D. Löve') 
Out[1]: 'Alnus viridis (Chaix) DC. ssp. sinuata (Regel) A. Löve & D. Löve' 

Python 3 Как я могу получить такое же представление в Python 2? Я пишу строки в таблицу sqlite3.

+0

Если вы хотите использовать unicode, используйте unicode. 'print u'Alnus viridis (Chaix) DC. подвид. sinuata (Regel) A. Löve & D. Löve'' делает то, что вы хотите в Python 2. –

ответ

1

Кажется, что вы хотите, это строковый литерал в Юникоде. В Python 3 все нормальные строковые литералы являются строковыми литералами в формате Юникод. В Python 2 значения unicode являются строками unicode. Создание Юникода строковые литералы в Python 2 осуществляется путем наложения u перед буквальным:

u'Alnus viridis (Chaix) DC. ssp. sinuata (Regel) A. Löve & D. Löve' 

Это же представление, как ваша строка Python 3. Обратите внимание, что если ваш исходный файл в UTF-8 кодировке, вам нужно добавить специальный комментарий, чтобы указать на это, на первой или второй линии, такие как:

# -*- coding: utf-8 -*- 

Для получения дополнительной информации по этому вопросу см PEP 263 или this other question.

+0

Это тоже дает ошибку в Python 2. Мне нужно, чтобы API были совместимы для совместимости с python 2/3. Я бы предпочел сохранить удобочитаемый формат (т. Е. Получить преобразование типа python3). – goelakash

+0

Извините за путаницу. Думаю, теперь это ответ на ваш вопрос, как написано? –

+0

@goelakash Ой, подождите, пытаетесь ли вы создать исходный файл, который работает правильно как на Python 2, так и на Python 3? Если да, пожалуйста, отредактируйте свой вопрос, чтобы сказать это. –