Вы попали в угловую ловушку.Unicode определяет U+00A0
(u'\xa0'
в нотации Python) как символ NO-BREAK SPACE.Он печатается точно так же, как обычный пробел (U+0020
или u'\x20'
), но является отдельным символом и не входит в диапазон ASCII.удалось получить это пространство без перерывов в вашей строке Unicode, отсюда и странная печать в Python 3 и невозможность конвертировать ее в ascii в Python 2. Поскольку формат представляет собой простую (байтовую) строку в вашем коде Python 2, UnicodeСтрока неявно преобразуется в ascii, что вызывает исключение.Таким образом, в Python 2 вам нужно использовать формат Unicode, чтобы не получать ошибок:
u"'{}'".format(u'ES SIOUF_1')
будет работать так же, как и в Python 3.
Как исправить?
Правильный способ - избавиться от оскорбительного u'\x20'
перед попыткой его обработать.Если вы не можете, вы можете явно заменить его обычным пробелом:
"'{}'".format(u'ES SIOUF_1'.replace(u'\xa0', u'\x20'))
должен дать то, что вы хотите, как в Python 2, так и в Python 3