自lua 5.3开始支持utf8编码的脚本文件
测试时发现lua能够正确处理utf8编码的文本文件
但中文函数名(多字节字符)依然不支持
需要改造的地方就是llex.c中的llex函数
default分支的代码改为
default: {
/* identifier or utf8 or reserved word? */
if (lislalpha(ls->current) || (ls->current & 0x80))
{
TString *ts;
do
{
if (lislalnum(ls->current))
{
save_and_next(ls);
}
else
{
char t;
t = ls->current;
while (t & 0x80)
{
save_and_next(ls);
t = t << 1;
}
}
} while (lislalnum(ls->current) || (ls->current & 0x80));
ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
luaZ_bufflen(ls->buff));
seminfo->ts = ts;
if (isreserved(ts)) /* reserved word? */
return ts->extra - 1 + FIRST_RESERVED;
else {
return TK_NAME;
}
}
else { /* single-char tokens (+ - / ...) */
int c = ls->current;
next(ls);
return c;
}
}
在注册函数的时候需要先转码为utf8之后再调用lua_register
函数中使用lua_tostring获取的是utf8编码的字符串
注意luaL_dofile不受影响
这样就可以在代码和脚本中使用任何字符集了
---
lua 5.3