有什么办法用Lua提取UTF-8编码字符串的第一个字母?用Lua提取UTF-8字符串的第一个字母
Lua没有正确支持Unicode,所以string.sub("ÆØÅ", 2, 2)
将返回"?"
而不是"Ø"
。
是否有一个相对简单的UTF-8解析算法,我可以使用每字节的字节字节,唯一目的是获取字符串的第一个字母,无论是中文字符还是A?
或者是这种方式太复杂,需要一个巨大的图书馆等?
有什么办法用Lua提取UTF-8编码字符串的第一个字母?用Lua提取UTF-8字符串的第一个字母
Lua没有正确支持Unicode,所以string.sub("ÆØÅ", 2, 2)
将返回"?"
而不是"Ø"
。
是否有一个相对简单的UTF-8解析算法,我可以使用每字节的字节字节,唯一目的是获取字符串的第一个字母,无论是中文字符还是A?
或者是这种方式太复杂,需要一个巨大的图书馆等?
可以容易地提取由UTF-8编码的字符串的第一个字母为以下代码:
function firstLetter(str)
return str:match("[%z\1-\127\194-\244][\128-\191]*")
end
由于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
请注意,这两个示例都会为每个字母返回一个字符串值,而不是Unicode代码点数值。
Lua 5.3提供了一个UTF-8 library。
您可以使用utf8.codes
让每个代码点,然后用utf8.char
来获得字符:
local str = "ÆØÅ"
for _, c in utf8.codes(str) do
print(utf8.char(c))
end
这也适用于:
local str = "ÆØÅ"
for w in str:gmatch(utf8.charpattern) do
print(w)
end
其中utf8.charpattern
只是字符串"[\0-\x7F\xC2-\xF4][\x80-\xBF]*"
用于匹配一个UTF-8字节序列的模式。
“*简单的Unicode解析算法*”“Unicode”是什么样的*这种?它是UTF-8,UTF-16还是别的?什么是编码? –
http://www.joelonsoftware.com/articles/Unicode.html阅读本文。请。 – Cubic
这里还有一个[Lua用户页面](http://lua-users.org/wiki/LuaUnicode) –