python判断文本显示长度
在实际应用中我们难免遇到某些显示位置最多只能显示比如4个中文加1个英文,一共9个字节的gbk编码文字,但是我们文本是utf-8的,如果转换GBK,担心里面有非GBK文字,那么我们如何截取来控制显示字符个数呢?
思路是这样子:首先文本用unicode表示,python中用u"汉字和English"表示;如果是字母或数字,计数宽度单位为1,否则计数2,这样来判断文本显示宽度是否超标,如果超标,利用截取函数,一个一个的往后截取,直到显示宽度越界了,回退一个,截取这么多个unicode字符返回即可。
代码如下:
#coding=utf-8def is_chinese(uchar): '''判断一个unicode是否是汉字''' if uchar >= u'\u4e00' and uchar<=u'\u9fa5': return True return Falsedef is_number(uchar): """判断一个unicode是否是数字""" if uchar >= u'\u0030' and uchar<=u'\u0039': return True return Falsedef is_alphabet(uchar): """判断一个unicode是否是英文字母""" if (uchar >= u'\u0041' and uchar<=u'\u005a') \ or (uchar >= u'\u0061' and uchar<=u'\u007a'): return True return Falsedef is_other(uchar): """判断是否非汉字,数字和英文字符""" if not (is_chinese(uchar) or is_number(uchar) or is_alphabet(uchar)): return True return False# gbk宽度可用于对齐,中文占两个字符位置def gbkwordlen(u): if is_number(u) or is_alphabet(u): return 1 return 2# 计算文本显示宽度def gbkwordslen(uw): i = 0 for u in uw: i += gbkwordlen(u) return idef trunc_word(uw, len): l = 0 i = 1 for u in uw: l += gbkwordlen(u) if l > len: return uw[:i-1] i += 1 return uwa = u"更新a至1209期"print trunc_word(a, 6)print gbkwordslen(a)
?