UTF-8编码规则

  1. UTF-8是一种变长的字符编码, 它可以用1-4个字节来表示一个字符, 一般来说, 英文字符和数字需要1个字节, 中文标点需要2个, 少数汉字需要3个, 大多数汉字需要4个.
  2. 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的Unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
  3. 对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的Unicode码。

在lua中, 字符串内容包含汉字时, 需要从字符串中提取每个字符, 就需要根据UTF-8编码进行特殊处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function TakeChar(str)
local list = {}
for utf8 in string.gmatch(str, "[%z\1-\127\194-\244][\128-\191]*") do
table.insert(list, utf8)
end
return list
end

local result = TakeChar("中国2023")
for _, char in ipairs(result) do
print(char)
end


2
0
2
3