【问题标题】:Get "actual" length of string in Unicode characters以 Unicode 字符获取字符串的“实际”长度
【发布时间】:2014-06-15 03:32:11
【问题描述】:

给定一个像“”(\xe2\x9c\xae)这样的字符,例如,可以是其他像“Σ”、“д”或“Λ”)我想找到“实际" 字符在屏幕上打印时的长度

例如

len("✮")
len("\xe2\x9c\xae")

都返回 3,但应该是 1

【问题讨论】:

  • 试试:len("✮".decode("utf-8"))
  • 这不取决于所使用的字体以及它周围的字符 - 你想要做的总体事情是什么?
  • len("\xe2\x9c\xae".decode('UTF-8')) 在 python2.7.5 中完美运行。
  • 这里有几种定义长度(和宽度)的方法。知道你想要这个是为了什么会有所帮助:例如,你是否试图计算出屏幕上一行可以容纳多少个字符?

标签: python python-2.7 string-length unicode-string


【解决方案1】:

你可以这样尝试:

unicodedata.normalize('NFC', u'✮')
len(u"✮")

UTF-8 是一种 unicode 编码,它使用多个字节来表示特殊字符。检查unicodedata.normalize()

【讨论】:

  • 即使这样也不一定要计算用户感知的字符或字素簇;变音符号的某些用途没有单码点表示。我也没有看到 UTF-8(具体而言)是如何进入图片的?
  • 这也返回 len(unicodedata.normalize('NFC', u'✮')) = 3
【解决方案2】:

我的answersimilar question

您正在从当前输出上下文中寻找渲染宽度。对于图形 UI,通常有一种方法可以直接查询这些信息;对于文本环境,您所能做的就是猜测符合标准的渲染引擎可能会做什么,并希望实际引擎符合您的期望。

【讨论】:

  • 以像素为单位的渲染宽度是另一个主题。我看不出有人问过这个问题。
  • 对于等宽文本输出,标准字形宽度是最小的可寻址单位,我们感兴趣的是该单位的倍数——这与像素宽度没有太大区别。
猜你喜欢
  • 1970-01-01
  • 2021-05-26
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多