源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Lua获取utf8字符串长度和字符串截取并用...代替

  • 时间:2021-02-02 17:07 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Lua获取utf8字符串长度和字符串截取并用...代替
[b]一、LUA获取utf8字符串长度[/b]
[u]复制代码[/u] 代码如下:
--- 获取utf8编码字符串正确长度的方法 -- @param str -- @return number function utfstrlen(str) local len = #str; local left = len; local cnt = 0; local arr={0,0xc0,0xe0,0xf0,0xf8,0xfc}; while left ~= 0 do local tmp=string.byte(str,-left); local i=#arr; while arr[i] do if tmp>=arr[i] then left=left-i;break;end i=i-1; end cnt=cnt+1; end return cnt; end
[b]二、截取给定字符串的部分长度,超出部分用省略号“.”替换[/b]
[u]复制代码[/u] 代码如下:
--@brief 切割字符串,并用“...”替换尾部 --@param sName:要切割的字符串 --@return nMaxCount,字符串上限,中文字为2的倍数 --@param nShowCount:显示英文字个数,中文字为2的倍数,可为空 --@note         函数实现:截取字符串一部分,剩余用“...”替换 function GetShortName(sName,nMaxCount,nShowCount)     if sName == nil or nMaxCount == nil then         return     end     local sStr = sName     local tCode = {}     local tName = {}     local nLenInByte = #sStr     local nWidth = 0     if nShowCount == nil then        nShowCount = nMaxCount - 3     end     for i=1,nLenInByte do         local curByte = string.byte(sStr, i)         local byteCount = 0;         if curByte>0 and curByte<=127 then             byteCount = 1         elseif curByte>=192 and curByte<223 then             byteCount = 2         elseif curByte>=224 and curByte<239 then             byteCount = 3         elseif curByte>=240 and curByte<=247 then             byteCount = 4         end         local char = nil         if byteCount > 0 then             char = string.sub(sStr, i, i+byteCount-1)             i = i + byteCount -1         end         if byteCount == 1 then             nWidth = nWidth + 1             table.insert(tName,char)             table.insert(tCode,1)                     elseif byteCount > 1 then             nWidth = nWidth + 2             table.insert(tName,char)             table.insert(tCode,2)         end     end         if nWidth > nMaxCount then         local _sN = ""         local _len = 0         for i=1,#tName do             _sN = _sN .. tName[i]             _len = _len + tCode[i]             if _len >= nShowCount then                 break             end         end         sName = _sN .. "..."     end     return sName end
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部