【发布时间】:2015-09-02 02:40:44
【问题描述】:
在 Python 3 中,Unicode 字符串应该给你 Unicode 字符的数量,但鉴于某些字符组合,我无法弄清楚如何获得字符串的最终显示宽度。
创世记 1:1 -- בְּרֵאשִׁית、בָּרָא אֱלֹהִים、אֵת הַשָּׁמַיִם、וְאֵת הָאָרֶץ
>>> len('בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ')
60
但字符串只有 37 个字符宽。规范化并不能解决问题,因为元音(较大字符下方的点)是不同的字符。
>>> len(unicodedata.normalize('NFC', 'בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ'))
60
附带说明:textwrap 模块在这方面完全被破坏了,在不应该的地方积极地包装。 str.format 似乎同样坏掉了。
- 被标记为重复的类似问题: Display width of unicode strings in Python
- 它被标记为重复的问题仅解决了规范化: Normalizing Unicode
【问题讨论】:
-
计算字素簇可能还不够,例如,different fonts may lead to different text sizes
-
即使我们保证使用等宽字体?
-
点击链接,尝试代码并亲自查看。
标签: python python-3.x unicode