作者:梁利锋

884天前 (阅读:1202)

需要一个对Utf-8进行截取的Lua代码,看了一下,Lua的系统库,没有专用的处理Unicode的函数,在网上搜了一下,找到这篇Lua Unicode ,虽然没有我需要的截取函数,但是按这个思路,倒也不难,于是自己实现了一个usub函数。

我的需求是,取前N个字符,所以我的实现,没有起始位置,只有截取长度,也不支持传入负数(string.sub函数传入负数的话,是截取尾部的N个字符的)。使用方法可以参考getSummary函数。

local function usub(str, len, cm)
    local i = 1
    local n = 0
    while true do
        local b,e = string.find(str, "([%z\1-\127\194-\244][\128-\191]*)", i)
        if(b == nil) then
            return str
        end
        i = e + 1
        n = n + 1
        if(n > len) then
            local r = string.sub(str, 1, b-1)
            if(cm == nil) then
                return r
            end
            return r..cm
        end
    end
end

local function getSummary(str)
    local t = string.gsub(str, "<.->", "")
    return usub(t, 100, "...")
end