濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Lua中獲取utf8字符串長(zhǎng)度的方法和自定義函數(shù)

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

熱門(mén)標(biāo)簽:漳州智云呼電話機(jī)器人 怎么去除地圖標(biāo)注 地圖標(biāo)注大廈 個(gè)人怎么在地圖標(biāo)注需要的店鋪 武漢外呼防封系統(tǒng)多少錢(qián) 冀州市地圖標(biāo)注 清朝地圖標(biāo)注哈爾濱 百度地圖標(biāo)注早餐區(qū)域 新岸線智能電銷(xiāo)機(jī)器人

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

--- 獲取utf8編碼字符串正確長(zhǎng)度的方法
-- @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庫(kù)不支持處理utf-8編碼的漢字。用lua要處理漢字還是很費(fèi)勁的。

UTF8的編碼規(guī)則:

1. 字符的第一個(gè)字節(jié)范圍: 0x00—0x7F(0-127),或者 0xC2—0xF4(194-244); UTF8 是兼容 ascii 的,所以 0~127 就和 ascii 完全一致
2. 0xC0, 0xC1,0xF5—0xFF(192, 193 和 245-255)不會(huì)出現(xiàn)在UTF8編碼中
3. 0x80—0xBF(128-191)只會(huì)出現(xiàn)在第二個(gè)及隨后的編碼中(針對(duì)多字節(jié)編碼,如漢字)
 
 這樣我們可以利用lua強(qiáng)大的模式匹配,來(lái)實(shí)現(xiàn)我們要的效果,關(guān)鍵的處理有這么兩個(gè):
1. local _, count = string.gsub(str, "[^\128-\193]", ""),用來(lái)得到str中的字符數(shù)
2. for uchar in string.gfind(str, "[%z\1-\127\194-\244][\128-\191]*") do tab[#tab+1] = uchar end,用來(lái)把str中的每個(gè)字符映射到tab中

您可能感興趣的文章:
  • Lua獲取utf8字符串長(zhǎng)度和字符串截取并用...代替

標(biāo)簽:金昌 濰坊 德宏 宣城 儋州 天門(mén) 臺(tái)灣 天門(mén)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua中獲取utf8字符串長(zhǎng)度的方法和自定義函數(shù)》,本文關(guān)鍵詞  Lua,中,獲取,utf8,字符串,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Lua中獲取utf8字符串長(zhǎng)度的方法和自定義函數(shù)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Lua中獲取utf8字符串長(zhǎng)度的方法和自定義函數(shù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    静安区| 正镶白旗| 伊宁县| 嘉义县| 信丰县| 吉木萨尔县| 和平县| 内江市| 东光县| 绵竹市| 宜春市| 蓬溪县| 黄冈市| 边坝县| 垫江县| 休宁县| 平罗县| 桃源县| 大同县| 汤阴县| 阳新县| 乌拉特中旗| 长岛县| 临城县| 怀柔区| 泽库县| 穆棱市| 杭锦后旗| 新津县| 文水县| 锡林浩特市| 建昌县| 大连市| 枣庄市| 舟曲县| 肇源县| 白朗县| 慈利县| 习水县| 河西区| 潮州市|