视觉长度截断函数

本文介绍了一种用于计算中文字符串显示宽度的方法,通过分析字符编码来确定每个字符的可视宽度,并提供了具体的实现算法。该算法适用于需要精确控制文本显示长度的应用场景。
#长度的来源见附件中的html

_visable_width=0, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 24,
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
12, 12, 16, 28, 28, 44, 32, 8, 16, 16, 20, 28, 12, 16, 12, 12, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 12, 12, 28, 28, 28, 28, 48, 28, 32,
36, 36, 32, 28, 36, 36, 12, 24, 32, 28, 36, 36, 36, 32, 36, 36, 32,
28, 36, 28, 44, 28, 28, 28, 12, 12, 12, 20, 28, 16, 28, 28, 24, 28,
28, 12, 28, 28, 12, 12, 24, 12, 44, 28, 28, 28, 28, 16, 28, 12, 28,
20, 36, 20, 20, 20, 16, 12, 16, 28, 24
#中文长48

def visable_length(word):
length=len(word)
width=0
i=0
while i<length:
c=word[i]
if c>"\xE0" and c<="\xEF":
i+=3
width+=48
else:
if c<"\xC0":
i+=1
width+=_visable_width[ord(c)]
else:
width+=48
if c<="\xDF":i+=2
elif c<="\xF7":i+=4
elif c<="\xFB":i+=5
else:i+=6
return width

def visable_cut(word,limit,etc="..."):
i=0
length=len(word)
if length<=limit:return word
limit = limit*48
width = 0
while i<length:
c=word[i]
if c>"\xE0" and c<="\xEF":
offset=3
width+=48
else:
if c<"\xC0":
offset=1
width+=_visable_width[ord(c)]
else:
width+=48
if c<="\xDF":offset=2
elif c<="\xF7":offset=4
elif c<="\xFB":offset=5
else:offset=6
if width>limit:
etc_length=(48+visable_length(etc))/48
return word[:i-etc_length]+etc
else:
i+=offset
return word
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值