中文都是对于128的,所以用下边的函数可以计算出中文字符串长度,计算100k长度效率可以接受 function length(str) local _,n=str:gsub('[\128-\255]','') return #str-n/2 end 复制代码 对于截取10k以内速度还可以,100k需要大约2秒,不能使用了 function sub(st,s,e) local t={} local l=1 for n=1,#str do b=str:byte(n) if b<128 then l=l+1 else l=l+0.5 end if l>s and l<=e+1 then table.insert(t,str:sub(n,n)) elseif l>=e+1 then break end end return table.concat(t) end 复制代码