在列表顯示的時候,我們常常要擷取文章標題的長度,python擷取字串,本來很簡單的,但是中文和英文的寬度不一樣,在頁面看起來長度就差很遠了:
length7
這是中文長度七
粗略來算(是粗略哦),乙個中文字元的寬度大概等於兩個英文本元的寬度。
乙個中文字元的utf8編碼長度為3,gbk為2:
所以將使用gbk來計算長度(因為乙個中文字元的寬度大概為兩個英文本元)
@register.filter
def cut_str(str, length=10):
"""擷取字串,使得字串長度等於length,並在字串後加上省略號
"""is_encode = false
try:
str_encode = str.encode('gb18030') #為了中文和英文的長度一致(中文按長度2計算)
is_encode = true
except:
pass
if is_encode:
l = length*2
if l < len(str_encode):
l = l - 3
str_encode = str_encode[:l]
try:
str = str_encode.decode('gb18030') + '...'
except:
str_encode = str_encode[:-1]
try:
str = str_encode.decode('gb18030') + '...'
except:
is_encode = false
if not is_encode:
if length < len(str):
length = length - 2
return str[:length] + '...'
return str
注:(1)、這裡傳入的引數 str 是unicode來的。 (2)、之所以使用'gb18030'編碼,是因為'gb18030'比gbk的字符集要廣。 lua如何擷取中英文混合字串
lua在utf8下乙個中文字長度為3,這樣在中英文混排時擷取字串就比較麻煩,下面的函式是中文字長度為1下的處理 獲取utf8編碼字串長度,中文長度為1 function utfstrlen str local len str local left len local cnt 0 local arr ...
C 中英文混合字串擷取函式
一 截斷字串 最大長度 原字串 public static string cutstr int maxlength,string str for int i temp.length i 0 i return 二private string getbytestring string center,in...
Oracle擷取中英文混合字串的處理
declare i int set i 30 while i 0 begin update 表 set 標題 left 標題,i where datalength left 標題,i 30 and datalength 標題 30 set i i 1 end 減少迴圈 declare i int s...