3

当我们相信 Python 3 在 Unicode 上一切正常时,当我遇到这种情况时,我感到很惊讶。

>>> amma = "அம்மா"
>>> amma
'அம்மா'
>>> len(amma)
5

显然泰米尔语字符串"அம்மா"有 3 个字母,返回值 5 表示len("அம்மா")绝对不能接受或赞赏。

其他 Dravidian 或 Brahmic 脚本如何解决此问题以获得正确的字符串长度?

编辑#1:考虑到@joey 的评论,这个问题可以改写如下。

如何在 Python 中计算字形长度?

我们知道 Swift 或 Perl6 默认会这样做

  2> let amma = "அம்மா".characters.count
amma: Distance = 3
4

3 回答 3

2

它可能有 3 个字母,但它有 5 个字符:

$ charinfo 'அம்மா'
U+0B85 TAMIL LETTER A [Lo]
U+0BAE TAMIL LETTER MA [Lo]
U+0BCD TAMIL SIGN VIRAMA [Mn]
U+0BAE TAMIL LETTER MA [Lo]
U+0BBE TAMIL VOWEL SIGN AA [Mc]

如果您需要更具体,则只需计算“字母”类别中的字符数。

于 2016-01-27T10:23:39.990 回答
1

下面的代码只计算字符并忽略 unicode 标记(使用标准re模块)。

import re
amma = "அம்மா"
len(re.findall("[ஃ-ஹ]", amma))

以下是获取 unicode 字母计数的最快方法(使用第三方regex模块)。

import regex
amma = "அம்மா"
len(regex.findall('\p{L}\p{M}*', amma))
于 2020-07-24T12:51:13.283 回答
0

包裹

pip install Open-Tamil

代码

from tamil import utf8
amma = "அம்மா"
letters = utf8.get_letters(amma)
print(len(letters))
于 2020-07-24T07:50:52.007 回答