【python】含中文字符串截斷

對於含多字節的字符串,進行截斷的時候,要判斷截斷處是幾字節字符,不能將多字節從中分割,避免截斷後亂碼python

 

下面給出utf8和gb18030上的實現, 用任何一種均可以,能夠先進行轉碼,用encode, decode;編碼

 

方法1:對utf8:  參考:http://blog.csdn.net/marising/article/details/3452971spa

def subString(string,length):
    if length >= len(string):
                return string

    result = ''
    i = 0
    p = 0

    while True:
                ch = ord(string[i])
                #1111110x
                if ch >= 252:
                        p = p + 6
                #111110xx
                elif ch >= 248:
                        p = p + 5
                #11110xxx
                elif ch >= 240:
                        p = p + 4
                #1110xxxx
                elif ch >= 224:
                        p = p + 3
                #110xxxxx
                elif ch >= 192:
                        p = p + 2
                else:
                        p = p + 1   
        
                if p >= length:
                        break;
                else:
                        i = p

    return string[0:i]

 

方法2:對gb18030編碼.net

def cut_string_off(string,s_len):
        if len(string)==0 or s_len <=0:
                return string

        elif len(string)==1 or s_len >= len(string):
                return string

        elif s_len < len(string):
                len_num=0
                while len_num < s_len:
                        tmp_c=ord(string[len_num])
                        if tmp_c >0 and tmp_c <=0x7F:
                                len_num+=1
                                continue

                        tmp_nextc=ord(string[len_num+1])
                        if tmp_c >= 0x81 and tmp_c <=0xFE and tmp_nextc>=0x40 and tmp_nextc<=0xFE:
                                len_num+=2
                                continue

                        else:
                                len_num +=1;
                                continue

                        break

                tmp = string[0:len_num]
#       print utf2gbk(tmp)
        return tmp
相關文章
相關標籤/搜索