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
lua的string库不支持处理utf-8编码的汉字。用lua要处理汉字还是很费劲的。
UTF8的编码规则:
1.字符的第一个字节范围:0x00—0x7F(0-127),或者0xC2—0xF4(194-244);UTF8是兼容ascii的,所以0~127就和ascii完全一致
2.0xC0,0xC1,0xF5—0xFF(192,193和245-255)不会出现在UTF8编码中
3.0x80—0xBF(128-191)只会出现在第二个及随后的编码中(针对多字节编码,如汉字)
这样我们可以利用lua强大的模式匹配,来实现我们要的效果,关键的处理有这么两个:
1.local_,count=string.gsub(str,"[^\128-\193]",""),用来得到str中的字符数
2.forucharinstring.gfind(str,"[%z\1-\127\194-\244][\128-\191]*")dotab[#tab+1]=ucharend,用来把str中的每个字符映射到tab中