Unicode литералы, которые работают в Python 3 и 2 - PullRequest
36 голосов
/ 08 июля 2011

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

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

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

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

Ответы [ 2 ]

27 голосов
/ 09 июля 2011

Редактировать - Начиная с 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
0 голосов
/ 04 июня 2019

В 3.0, 3.1 и 3.2:

from __future__ import unicode_literals

Источник : убершмекель , в вопросе. См. редакция 4 для оригинала.

...