unicond编码

美国佬语言由简单的符号和26个字母组成,这样,他们只需要一个字节就可以表达出所有了。
这是ascii码。
实际上很多很多国家的语言文字极其丰富,比如中文。用ascii码最多可以256个符号,远远不够!!!
如果有一种编码囊括世界上所有的语言文字就好了,这样世界上所有的符号都能用计算机表示,这就是unicode.
它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
Unicode中:汉字“字”对应的数字是23383(十进制),十六进制表示为5B57。
在Unicode中,我们有很多方式将数字23383表示成程序中的数据,包括:UTF-8、UTF-16、UTF-32。
下面介绍介绍一种非常常用的编码方式。UTF-8,是一种针对Unicode的可变长度字符编码,又称万国码规则如下。
Unicode编码(十六进制) UTF-8 字节流(二进制)
000000 - 00007F        0xxxxxxx >=0
000080 - 0007FF        110xxxxx 10xxxxxx >=0xc0
000800 - 00FFFF        1110xxxx 10xxxxxx 10xxxxxx >=0xe0
010000 - 10FFFF        11110xxx 10xxxxxx 10xxxxxx 10xxxxxx >=0xf0
可以看出,如果某字符第一个字节第一位为0,那么这字符占一个字节,这时同ascii码。
如果第一位为1,那么连续的1个数即该字符占字节数。编码规则如上。
请看下面一段代码
local input = "你好World"
print(string.utf8len(input))
-- 输出 7
function string.utf8len(input)
    local len  = string.len(input)
    local left = len
    local cnt  = 0
    local arr  = {0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}
    while left ~= 0 do
        local tmp = string.byte(input, -left)--字符转对应的int
        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
特别注意的是,这段代码保存时一定确保为utf-8.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值