Lua获取utf8字符串长度和字符串截取并用...代替
一、LUA获取utf8字符串长度
---获取utf8编码字符串正确长度的方法 --@paramstr --@returnnumber functionutfstrlen(str) locallen=#str; localleft=len; localcnt=0; localarr={0,0xc0,0xe0,0xf0,0xf8,0xfc}; whileleft~=0do localtmp=string.byte(str,-left); locali=#arr; whilearr[i]do iftmp>=arr[i]thenleft=left-i;break;end i=i-1; end cnt=cnt+1; end returncnt; end
二、截取给定字符串的部分长度,超出部分用省略号“.”替换
--@brief 切割字符串,并用“...”替换尾部 --@param sName:要切割的字符串 --@return nMaxCount,字符串上限,中文字为2的倍数 --@param nShowCount:显示英文字个数,中文字为2的倍数,可为空 --@note 函数实现:截取字符串一部分,剩余用“...”替换
functionGetShortName(sName,nMaxCount,nShowCount) ifsName==nilornMaxCount==nilthen return end localsStr=sName localtCode={} localtName={} localnLenInByte=#sStr localnWidth=0 ifnShowCount==nilthen nShowCount=nMaxCount-3 end fori=1,nLenInBytedo localcurByte=string.byte(sStr,i) localbyteCount=0; ifcurByte>0andcurByte<=127then byteCount=1 elseifcurByte>=192andcurByte<223then byteCount=2 elseifcurByte>=224andcurByte<239then byteCount=3 elseifcurByte>=240andcurByte<=247then byteCount=4 end localchar=nil ifbyteCount>0then char=string.sub(sStr,i,i+byteCount-1) i=i+byteCount-1 end ifbyteCount==1then nWidth=nWidth+1 table.insert(tName,char) table.insert(tCode,1) elseifbyteCount>1then nWidth=nWidth+2 table.insert(tName,char) table.insert(tCode,2) end end ifnWidth>nMaxCountthen local_sN="" local_len=0 fori=1,#tNamedo _sN=_sN..tName[i] _len=_len+tCode[i] if_len>=nShowCountthen break end end sName=_sN.."..." end returnsName end