Lua中獲取utf8字符串長度的方法和自定義函數(shù)
--- 獲取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
lua 的string庫不支持處理utf-8編碼的漢字。用lua要處理漢字還是很費勁的。
UTF8的編碼規(guī)則:
1. 字符的第一個字節(jié)范圍: 0x00—0x7F(0-127),或者 0xC2—0xF4(194-244); UTF8 是兼容 ascii 的,所以 0~127 就和 ascii 完全一致
2. 0xC0, 0xC1,0xF5—0xFF(192, 193 和 245-255)不會出現(xiàn)在UTF8編碼中
3. 0x80—0xBF(128-191)只會出現(xiàn)在第二個及隨后的編碼中(針對多字節(jié)編碼,如漢字)
這樣我們可以利用lua強大的模式匹配,來實現(xiàn)我們要的效果,關(guān)鍵的處理有這么兩個:
1. local _, count = string.gsub(str, "[^\128-\193]", ""),用來得到str中的字符數(shù)
2. for uchar in string.gfind(str, "[%z\1-\127\194-\244][\128-\191]*") do tab[#tab+1] = uchar end,用來把str中的每個字符映射到tab中
相關(guān)文章
lua開發(fā)中實現(xiàn)MVC框架的簡單應(yīng)用
最近的游戲項目中使用了lua腳本來開發(fā),項目中用到了MVC框架,最近有朋友問我怎么弄,在這里簡單分享一下思路和一些開發(fā)中的技巧。有需要的小伙伴可以參考下。2015-04-04
Lua協(xié)同程序coroutine的簡介及優(yōu)缺點
今天小編就為大家分享一篇關(guān)于Lua協(xié)同程序coroutine的簡介及優(yōu)缺點,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10

