如果我有一个包含组合字符的Python字符串,len将报告一个不对应于“已见”字符数的值。
例如,如果我有一个带有复行符和下划线(如u'A\u0332\u0305BC' )的字符串,则len(u'A\u0332\u0305BC')报告5;但是显示的字符串只有3个字符长。
如何获得“可见”(即用户所看到的字符串所占的不同位置)的长度?
发布于 2015-10-26 17:55:31
模块有一个函数combining,可用于确定单个字符是否为组合字符。如果它返回0,则可以将该字符计数为非组合字符。
import unicodedata
len(u''.join(ch for ch in u'A\u0332\u0305BC' if unicodedata.combining(ch) == 0))或者,稍微简单一点:
sum(1 for ch in u'A\u0332\u0305BC' if unicodedata.combining(ch) == 0)发布于 2015-10-26 19:18:32
发布于 2016-02-17 02:07:33
组合字符并不是唯一的零宽度字符:
>>> sum(1 for ch in u'\u200c' if unicodedata.combining(ch) == 0)
1("\u200c"或""是零宽度非连接字符;它是非打印字符。)
在这种情况下,regex模块也不能工作:
>>> len(regex.findall(r'\X', u'\u200c'))
1我找到了正确处理上述情况的wcwidth宽度:
>>> from wcwidth import wcswidth
>>> wcswidth(u'A\u0332\u0305BC')
3
>>> wcswidth(u'\u200c')
0但用户596219的例子似乎仍然不起作用:
>>> wcswidth('각')
4https://stackoverflow.com/questions/33351599
复制相似问题