Как сделать форматирование строки с Unicode EmDash? - PullRequest
5 голосов
/ 16 ноября 2011

Я пытаюсь сделать форматирование строки с помощью переменной Unicode. Например:

>>> x = u"Some text—with an emdash."
>>> x
u'Some text\u2014with an emdash.'
>>> print(x)
Some text—with an emdash.
>>> s = "{}".format(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2014' in position 9: ordinal not in range(128)

>>> t = "%s" %x
>>> t
u'Some text\u2014with an emdash.'
>>> print(t)
Some text—with an emdash.

Вы можете видеть, что у меня есть строка в юникоде, и она печатается очень хорошо. Проблема в том, что я использую новую (и улучшенную?) Функцию Python format(). Если я использую старый стиль (используя %s), все работает нормально, но когда я использую {} и функцию format(), это не получается.

Есть идеи, почему это происходит? Я использую Python 2.7.2.

Ответы [ 3 ]

9 голосов
/ 16 ноября 2011

Новый format() не так прост, когда вы смешиваете строки ASCII и Unicode ... поэтому попробуйте это:

s = u"{}".format(x)
3 голосов
/ 16 ноября 2011

Точно так же.

>>> s = u"{0}".format(x)
>>> s
u'Some text\u2014with an emdash.'
2 голосов
/ 14 июня 2017

Использование следующего хорошо для меня.Это вариант для других ответов.

>>> emDash = u'\u2014'
>>> "a{0}b".format(emDash)
'a—b'
...