Python';s.format()微型语言和Unicode

Python';s.format()微型语言和Unicode,python,unicode,Python,Unicode,我试图在我正在编写的命令行程序中使用一些简单的unicode字符,但将这些字符绘制到表中变得很困难,因为Python似乎将单字符符号视为多字符字符串 例如,如果我尝试打印(u“\u2714”.encode(“utf-8”)我会看到unicode复选标记。然而,如果我尝试向该字符添加一些填充(就像在表格结构中可能出现的那样),Python似乎将该单个字符串解释为3个字符的字符串。这三行打印的内容相同: print("|{:1}|".format(u"\u2714".encode("utf-8"))

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

例如,如果我尝试
打印(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适当地填充这个字符串?

在这一点上不要
编码('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上测试。

将格式字符串设置为unicode:

from __future__ import print_function

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

|✔|
|✔ |
|✔  |

我目前使用的是2.7,但我们也需要支持3。不过,打印功能不是工作所必需的。@你说的对。OP在一篇评论中提到,他专门针对Python2.7和3+,因此导入并使用了
unicode\u文本
print_function
division
如果不需要的话都是很好的做法。我完全同意:)我的评论更直接地指向另一条自那以后被删除的评论。这正是我需要的!谢谢。@DanielQuinn:完全不要编码。否则,如果环境使用不同的字符编码,您的代码可能会生成mojibake。@J.F.Sebastian如果我不编码,Python2.7将以
unicodeincoder
爆炸。如果我这样做了,那么Python 3会打印出
b'\xe2\x9c\x98'
@DanielQuinn:如果您在打印Unicode时遇到问题,那么这是另一个问题(硬编码字符编码不是答案)。阅读我之前评论中的链接。如果您阅读了链接的答案,但未能将解决方案应用到您的案例中,请提出单独的问题。