lua - 非ascii字符的string.byte

时间:2014-06-12 17:38:14

标签: lua ascii non-ascii-characters

我想将字符转换为数字代码,所以我尝试了string.byte(“å”)。但是,对于这些类型的字符,string.byte()的返回值似乎是195;

以任何方式获取非ascii字符的数字代码,如:?

à,á,â,ã,ä,å

我正在使用纯粹的lua;

1 个答案:

答案 0 :(得分:3)

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是逗号的编码。