国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

Lua中獲取utf8字符串長度的方法和自定義函數(shù)

2024-07-21 23:04:31
字體:
供稿:網(wǎng)友

 

復(fù)制代碼 代碼如下:

--- 獲取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要處理漢字還是很費(fèi)勁的。

 

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強(qiáng)大的模式匹配,來實(shí)現(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中

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 夹江县| 年辖:市辖区| 白水县| 汝城县| 七台河市| 成安县| 玉溪市| 台北市| 进贤县| 武城县| 彰化县| 平安县| 抚顺市| 乌拉特后旗| 乐至县| 射洪县| 绥中县| 南郑县| 无为县| 祁东县| 石门县| 山阳县| 河北区| 双鸭山市| 临湘市| 永顺县| 西平县| 郓城县| 隆安县| 临海市| 大连市| 尼勒克县| 灵寿县| 大新县| 文成县| 乐都县| 台中市| 台中市| 康乐县| 嘉义县| 甘谷县|