Django 擷取中英文混合字串

2021-09-06 00:08:23 字數 1137 閱讀 9777

在列表顯示的時候,我們常常要擷取文章標題的長度,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...