【问题标题】:Python's .format() minilanguage and UnicodePython .format() 迷你语言和 Unicode
【发布时间】:2016-01-24 19:03:48
【问题描述】:

我试图在我正在编写的命令行程序中使用一些简单的 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.7,但我们也需要支持 3。

标签: python unicode


【解决方案1】:

使您的格式字符串成为 unicode:

from __future__ import print_function

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

输出:

|✔|
|✔ |
|✔  |

【讨论】:

  • 此功能不需要打印功能。
  • @poke 你是对的。 OP 在评论中提到他专门针对 Python 2.7 和 3+,因此如果不需要,导入和使用 unicode_literalsprint_functiondivision 都是很好的做法。
  • 我完全同意这一点:)我的评论更多是针对另一条已被删除的评论。
【解决方案2】:

此时不要 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 上测试。

【讨论】:

  • 正是我需要的!谢谢。
  • @DanielQuinn:根本不编码。 Print Unicode directly instead。否则,如果环境使用不同的字符编码,您的代码可能会产生 mojibake。
  • @J.F.Sebastian 如果我不编码,Python2.7 会以UnicodeEncodeError 爆炸。如果我这样做了,那么 Python 3 会打印出 b'\xe2\x9c\x98'
  • @DanielQuinn:如果您在打印 Unicode 时遇到问题,那么这是一个不同的问题(硬编码字符编码不是答案)。阅读我之前评论中的链接。如果您阅读了链接的答案,但未能将解决方案应用于您的案例,请提出单独的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 2012-09-02
  • 2016-07-14
  • 2011-06-05
相关资源
最近更新 更多