首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python判断文本展示长度

2012-12-28 
python判断文本显示长度在实际应用中我们难免遇到某些显示位置最多只能显示比如4个中文加1个英文,一共9个

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)

?

热点排行