使用lua中的string.byte函数处理非ASCII字符

我想将字符转换为数字代码,因此我尝试了string.byte("å")。然而,似乎string.byte()的返回值对于这些类型的字符为195;

是否有方法获取非ASCII字符的数值代码,比如:

à、á、â、ã、ä、å

我正在使用纯lua;

点赞
用户1009479
用户1009479

Lua 认为字符串是一系列字节,但一个 Unicode 字符可能包含多个字节。

假设字符串具有有效的 UTF-8 编码,即可使用模式 "[\0-\x7F\xC2-\xF4][\x80-\xBF]*" 来匹配单个 UTF-8 字节序列(在 Lua 5.1 中,使用 "[%z\1-\127\194-\244][\128-\191]*"),然后获取其数字编码:

local str = "à,á,â,ã,ä,å"

for c in str:gmatch("[\0-\x7F\xC2-\xF4][\x80-\xBF]*") do
    print(c:byte(1, -1))
end

输出:

195 160
44
195 161
44
195 162
44
195 163
44
195 164
44
195 165

注意,44 是逗号的编码。

2014-06-13 00:48:31