如何确定字符串显示的宽度
例如 a = ‘PM2.5’ b = ‘地下管道’ c = ‘空铁 WIFI’,a 、b 、c 的宽度分别为 5 、8 、8,字母、数字的宽度为 1,汉字的宽度为 2 。用 len 函数得到的结果为 5 、4 、6 ;用 sys.getsizeof 得到的结果为 54 、82 、86,当字符串中含有混合字符时也不能用来推导显示宽度。请教还有没有其他方法。
例如 a = ‘PM2.5’ b = ‘地下管道’ c = ‘空铁 WIFI’,a 、b 、c 的宽度分别为 5 、8 、8,字母、数字的宽度为 1,汉字的宽度为 2 。用 len 函数得到的结果为 5 、4 、6 ;用 sys.getsizeof 得到的结果为 54 、82 、86,当字符串中含有混合字符时也不能用来推导显示宽度。请教还有没有其他方法。
width = (len(string) + len(string.encode(‘utf-8’))) // 2 # py3
前置还要移掉点 anis 之类的玩意儿,中日英目前用下来还好,日文小字也算 2 。
但是类似西班牙语法语那种带小尾巴的,unicode 有种写法是尾巴单独用一个字符,那个也许会有问题。
@songdg
另外我想起来类似 preetrytable 之类的模块,好像中文宽度都给处理过了,有兴趣也可以直接看看人家源码。
In [12]: [ord(c) for c in s]
Out[12]: [31354, 38081, 87, 73, 70, 73]
In [13]: [1 if ord(c) < 0x80 else 2 for c in s]
Out[13]: [2, 2, 1, 1, 1, 1]
In [14]: sum([1 if ord(c) < 0x80 else 2 for c in s])
Out[14]: 8