Lua中获取utf8字符串长度的方法和自定义函数

 更新时间:2015年04月21日 09:08:34   投稿:junjie  
这篇文章主要介绍了Lua中获取utf8字符串长度的方法和自定义函数,本文给出了代码实例并讲解了UTF8的编码规则,需要的朋友可以参考下

复制代码 代码如下:

--- 获取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的编码规则:

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. for uchar in string.gfind(str, "[%z\1-\127\194-\244][\128-\191]*") do tab[#tab+1] = uchar end,用来把str中的每个字符映射到tab中

相关文章

  • Lua的协程(coroutine)简介

    Lua的协程(coroutine)简介

    这篇文章主要介绍了Lua的协程(coroutine)简介,本文讲解了coroutine的创建、协程的三种状态和yield函数的配合使用等内容,需要的朋友可以参考下
    2015-04-04
  • 使用nginx+lua实现信息访问量统计

    使用nginx+lua实现信息访问量统计

    这篇文章主要介绍了使用nginx+lua实现信息访问量统计,功能很简单,代码也很简洁,有需要的小伙伴可以参考下,然后自由扩展。
    2015-03-03
  • Lua模拟面向对象示例分享

    Lua模拟面向对象示例分享

    本文这里主要给大家分享的是一则使用Lua模拟面向对象的方法的示例代码,大家学习下思路,希望对大家能够有所帮助。
    2015-03-03
  • Lua中rawset和rawget的作用浅析

    Lua中rawset和rawget的作用浅析

    这篇文章主要介绍了Lua中rawset和rawget的作用浅析,本文分别用两段代码演示了rawset和rawget的作用,需要的朋友可以参考下
    2015-04-04
  • Lua中操作字符串的基本方法整理

    Lua中操作字符串的基本方法整理

    这篇文章主要介绍了Lua中操作字符串的基本方法整理,是Lua入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • openresty中使用lua-nginx创建socket实例

    openresty中使用lua-nginx创建socket实例

    这篇文章主要介绍了openresty中使用lua-nginx创建socket实例,本文直接给出代码实例和运行效果,需要的朋友可以参考下
    2015-04-04
  • 简单讲解Lua中的垃圾回收机制

    简单讲解Lua中的垃圾回收机制

    这篇文章主要介绍了Lua中的垃圾回收机制,自动的垃圾回收是Lua的重要特性之一,需要的朋友可以参考下
    2015-05-05
  • Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记

    Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记

    这篇文章主要介绍了Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记,本文来自个人总结,需要的朋友可以参考下
    2014-09-09
  • Lua中的函数代码实例

    Lua中的函数代码实例

    这篇文章主要介绍了Lua中的函数代码实例,本文着重讲解函数的写法以及一些小知识,需要的朋友可以参考下
    2015-04-04
  • Lua table简明总结

    Lua table简明总结

    这篇文章主要介绍了Lua table简明总结,table是lua唯一的数据结构,table 是 lua 中最重要的数据类型,本文详细讲解了table的相关知识,需要的朋友可以参考下
    2014-10-10

最新评论