7
votes

Comment faire en forme de chaîne avec Unicode emdash?

J'essaie de formater la chaîne avec une variable Unicode. Par exemple:

>>> 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.


1 commentaires

Vous devriez être très prudent sur Windows, car si vous produisez sur la console, vous pouvez obtenir une exception comme celle-ci de toute façon.


3 Réponses :


9
votes

Le nouveau format () code> n'est pas aussi pardonnant lorsque vous mélangez des chaînes ASCII et UNICODE ... Essayez donc ceci:

s = u"{}".format(x)


2 commentaires

Bien que cela ait du sens, cela agace que l'ancien % s'occupe de cela plus facilement. Explicit, implicite, Yada Yada, mais toujours irritant.


En utilisant Python V3.8.2, il semble que le «U» n'est pas nécessaire.



3
votes

de la même manière.

>>> s = u"{0}".format(x)
>>> s
u'Some text\u2014with an emdash.'


0 commentaires

3
votes

Utiliser les suivants a bien fonctionné pour moi. C'est une variante sur les autres réponses.

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


0 commentaires