问题:带中文的字符串,如果直接使用string.gsub()函数截取,中文部分会有问题显示乱码,因为中文的长度和数字英文的不一样。
-- 计算utf8字符串字符数, 各种字符都按一个字符计算
-- 例如utf8len("1你好") => 3
function utf8len(str)
local len = 0
local currentIndex = 1
while currentIndex <= #str do
local char = string.byte(str, currentIndex)
currentIndex = currentIndex + chsize(char)
len = len +1
end
return len
end
--[[
Description:截取utf8 字符串(中英文数字混合适用)
parameters
str: 要截取的字符串
startChar: 开始字符下标,从1开始
numChars: 要截取的字符长度
]]
function utf8sub(str, startChar, numChars)
local startIndex = 1
while startChar > 1 do
local char = string.byte(str, startIndex)
startIndex = startIndex + chsize(char)
startChar = startChar - 1
end
local currentIndex = startIndex
while numChars > 0 and currentIndex <= #str do
local char = string.byte(str, currentIndex)
currentIndex = currentIndex + chsize(char)
numChars = numChars -1
end
return str:sub(startIndex, currentIndex - 1)
end
用法:
local str = utf8sub("123sb水电费123",5,5)
输出:
str = b水电费1