Python的.format()minilanguage和Unicode

时间:2015-10-25 17:47:16

标签: python unicode

我正在尝试在我正在编写的命令行程序中使用一些简单的unicode字符,但是将这些东西绘制到表中会变得很困难,因为Python似乎将单字符符号视为多字符字符串。

例如,如果我尝试print(u"\u2714".encode("utf-8")),我会看到unicode复选标记。但是,如果我尝试向该字符添加一些填充(可能在表格结构中),Python似乎将这个单字符串解释为3个字符的字符串。所有这三行都打印相同的东西:

print("|{:1}|".format(u"\u2714".encode("utf-8")))
print("|{:2}|".format(u"\u2714".encode("utf-8")))
print("|{:3}|".format(u"\u2714".encode("utf-8")))

现在我想我理解为什么这种情况发生了:它是一个多字节字符串。我的问题是,如何让Python适当填充此字符串?

2 个答案:

答案 0 :(得分:2)

使您的格式字符串为unicode:

from __future__ import print_function

print(u"|{:1}|".format(u"\u2714"))
print(u"|{:2}|".format(u"\u2714"))
print(u"|{:3}|".format(u"\u2714"))

输出:

|✔|
|✔ |
|✔  |

答案 1 :(得分:1)

此时不要encode('utf-8')做后者:

>>> u"\u2714".encode("utf-8")
'\xe2\x9c\x94'

UTF-8编码长度为三个字节。看看格式如何与Unicode字符串一起使用:

>>> u"|{:1}|".format(u"\u2714")
u'|\u2714|'
>>> u"|{:2}|".format(u"\u2714")
u'|\u2714 |'
>>> u"|{:3}|".format(u"\u2714")
u'|\u2714  |'

在Python 2.7.3上测试。