Подтвердить что ты не робот

Литералы Unicode, которые работают в python 3 и 2

Так что у меня есть скрипт на python, который я бы предпочел работать на python 3.2 и 2.7 просто для удобства.

Есть ли способ иметь литералы Unicode, которые работают в обоих? Например

#coding: utf-8
whatever = 'שלום'

Приведенный выше код потребовал бы строку Unicode в Python 2.x(u'') и в Python 3.x, что немного u вызывает синтаксическую ошибку.

4b9b3361

Ответ 1

Изменить. Начиная с Python 3.3, литерал u'' работает снова, поэтому функция u() не нужна.

Лучшим вариантом является создание метода, который создает объекты unicode из строковых объектов в Python 2, но оставляет только строковые объекты в Python 3 (так как они уже являются unicode).

import sys
if sys.version < '3':
    import codecs
    def u(x):
        return codecs.unicode_escape_decode(x)[0]
else:
    def u(x):
        return x

Затем вы будете использовать его так:

>>> print(u('\u00dcnic\u00f6de'))
Ünicöde
>>> print(u('\xdcnic\N{Latin Small Letter O with diaeresis}de'))
Ünicöde

Ответ 2

В 3.0, 3.1 и 3.2:

from __future__ import unicode_literals