我正在尝试使用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.
你可以看到我有一个unicode字符串,它打印得很好。问题是当我使用Python的新(和改进的?)format()
函数时。如果我使用旧样式(使用%s
),一切正常,但当我使用{}
和format()
函数时,它会失败。
有关为何发生这种情况的任何想法?我使用的是Python 2.7.2。
答案 0 :(得分:9)
当你混合使用ASCII和unicode字符串时,新的format()
并不宽容......所以试试这个:
s = u"{}".format(x)
答案 1 :(得分:3)
同样的方式。
>>> s = u"{0}".format(x)
>>> s
u'Some text\u2014with an emdash.'
答案 2 :(得分:2)
使用以下方法对我来说效果很好。这是其他答案的变体。
>>> emDash = u'\u2014'
>>> "a{0}b".format(emDash)
'a—b'