有没有办法用Lua提取UTF-8编码字符串的第一个字母?
Lua没有正确支持Unicode,因此string.sub("ÆØÅ", 2, 2)将返回"?"而不是"Ø".
是否有一个相对简单的UTF-8解析算法,我可以在每个字节的字符串字节上使用,唯一的目的是获取字符串的第一个字母,无论是中文字符还是A?
或者这种方式过于复杂,需要庞大的图书馆等等?
pra*_*pin 17
您可以使用以下代码轻松地从UTF-8编码的字符串中提取第一个字母:
function firstLetter(str)
return str:match("[%z\1-\127\194-\244][\128-\191]*")
end
Run Code Online (Sandbox Code Playgroud)
因为UTF-8代码点要么以0到127之间的字节开头,要么以194到244之间的字节开头,后跟128到191之间的一个或几个字节.
您甚至可以以类似的方式迭代 UTF-8代码点:
for code in str:gmatch("[%z\1-\127\194-\244][\128-\191]*") do
print(code)
end
Run Code Online (Sandbox Code Playgroud)
请注意,两个示例都返回每个字母的字符串值,而不是Unicode代码点数值.
Lua 5.3提供UTF-8库。
\n\n您可以使用utf8.codes来获取每个代码点,然后使用utf8.char获取字符:
local str = "\xc3\x86\xc3\x98\xc3\x85"\nfor _, c in utf8.codes(str) do\n print(utf8.char(c))\nend\nRun Code Online (Sandbox Code Playgroud)\n\n这也有效:
\n\nlocal str = "\xc3\x86\xc3\x98\xc3\x85"\nfor w in str:gmatch(utf8.charpattern ) do\n print(w)\nend\nRun Code Online (Sandbox Code Playgroud)\n\nutf8.charpattern字符串在哪里"[\\0-\\x7F\\xC2-\\xF4][\\x80-\\xBF]*"匹配一个 UTF-8 字节序列的模式的字符串。
| 归档时间: |
|
| 查看次数: |
3658 次 |
| 最近记录: |