UTF-8字符串在lua中的字长问题

来源:互联网 发布:bi开发工程师转行java 编辑:程序博客网 时间:2024/06/05 23:53

UTF-8字符串在lua中每个字符的字长是不一样,中文,英文,其他字符。都有各自不同的字长,所以UTF-8也叫作变长字符。规则如下:

1. utf8字符是变长字符

2. 字符长度有规律

UTF-8字符规律

字符串的首个byte表示了该utf8字符的长度

0xxxxxxx - 1 byte

110yxxxx - 192, 2 byte

1110yyyy - 225, 3 byte

11110zzz - 240, 4 byte



所以,要想满足自己对字符串按字符数量截取的话,就要进行一下包装了,直接贴代码,如下:

local UTF8 = {}function UTF8.chSize(char)    if not char then        return 0    elseif char > 240 then        return 4    elseif char > 225 then        return 3    elseif char > 192 then        return 2    else        return 1    endendfunction UTF8.sub(str, startChar, numChars)    if str == nil then        return ""    end  local startIndex = 1    if (startChar==nil) then      startChar = 1;    end    if (numChars==nil) then      numChars =15;    end;    local allChars = numChars  while startChar > 1 do      local char = string.byte(str, startIndex)      startIndex = startIndex + UTF8.chSize(char)      startChar = startChar - 1  end   local currentIndex = startIndex    while currentIndex <= numChars and currentIndex <= #str do    local char = string.byte(str, currentIndex)    currentIndex = currentIndex + UTF8.chSize(char)  end    if numChars < #str then        return str:sub(startIndex, currentIndex - 1).."..."    else        return str:sub(startIndex, currentIndex - 1)    end  endfunction UTF8.length(str)local length = 0;local currentIndex = 1;while currentIndex <= #str do    local char = string.byte(str, currentIndex)    currentIndex = currentIndex + UTF8.chSize(char)    length = length + 1  end  return length;endfunction UTF8.toString(str)    if type(str)=="string" then        return str    end    local char = ""    if type(str)~="table" then        return char    end    for key, var in pairs(str) do        if var == "\0" then            break        end        char = char .. var    end    return charendreturn UTF8;


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 续贷高校未通过怎么办 安卓手机网速慢怎么办 探探性别错了怎么办 尿酸高导致脚肿怎么办 联通光猫复位后怎么办 头部和脸部出油怎么办 vcd解码板坏了怎么办 脚崴了里面筋疼怎么办 长寿龟身上烂了怎么办 纱裙没有腰身显胖怎么办 橘子平台下载速度慢怎么办 换手机号了支付宝账号怎么办 怀孕期间脚扭了怎么办 买了临街房后悔怎么办 绝地求生困在废车里怎么办 身体出现辅助睡眠状态怎么办 扁桃体发炎喉咙痒咳嗽怎么办 电脑玩英雄杀卡怎么办 康佳冰箱显示2e怎么办 高考登陆系统登录密码错误怎么办 苹果遇到ad登录问题怎么办? 小孩2天不拉屎怎么办 20天宝宝不大便怎么办 小孩几天不拉大便怎么办 宝宝经常不拉大便怎么办 宝宝便秘 肛裂了怎么办 3个月宝宝不便便怎么办 宝宝8个月不便便怎么办 宝宝在幼儿园不爱说话怎么办 广东学考考了d怎么办 上嘴唇干燥紧绷怎么办 美国大学gpa非常低怎么办 大学手机作弊通报教务处怎么办 崩坏3邮箱验证码过期怎么办 快递员被顾客恶意投诉怎么办 5岁幼儿逻辑思维差怎么办 脸一边胖一边瘦怎么办 夏天穿鞋子脚痒怎么办 脚痒怎么办但不是脚气 脚气脚趾缝烂了怎么办 凉鞋穿久了臭怎么办