Tim*_*imK 20 unicode lua programming-languages
根据下面的链接,我对Lua编程语言是否支持Unicode感到困惑.
http://lua-users.org/wiki/LuaUnicode
它看起来确实有但有局限性.我根本不明白,限制什么大/关键或不是什么大不了?
sno*_*rpe 17
您当然可以将 lua中的unicode字符串存储为utf8.您可以像使用任何字符串一样使用它们.
然而,Lua没有为这些字符串上的更高级别"unicode感知"操作提供任何默认支持 - 例如,计算字符串中的字符串长度,转换为低级到大写等等.这种缺乏是否对您有意义真的取决于关于你打算用这些字符串做什么.
可能的方法,取决于您的用途:
如果您只想输入/输出/存储字符串,并且通常将它们用作"整个单元"(用于表索引等),您可能根本不需要任何特殊处理.在这种情况下,您只需将这些字符串视为二进制blob.
由于utf8的巧妙设计,可以对包含utf8的字符串进行某些类型的字符串操作,并且无需特别注意即可产生正确的结果.
例如,你可以追加字符串,在ascii字符之前/之后将它们分开等等.例如,如果你有一个字符串"??.txt"并且你搜索".".在字符串中使用string.find (string_var, "."),然后使用正常分裂其string.sub功能分为"??"和".txt",即使你不使用任何一种"支持Unicode的"算法这些结果字符串将是正确的UTF8字符串.
类似地,您可以仅对字符串中的ASCII字符(具有高位零的字符)进行大小写转换,并将其余字符串视为二进制而不将其搞砸.
一些utf8感知操作非常简单,只需编写一个自己的函数就可以轻松完成.
例如,要计算字符串的unicode-characters的长度,只需计算高位零(ASCII字符)的字符数,以及前两位的字符数11(非ASCII的"前导字节")字符); 长度是这两者的总和.
对于更复杂的操作 - 例如,非ASCII字符的大小写转换等 - 您可能必须使用Lua unicode库,例如(前面提到的)Lua用户Unicode页面上的那些
Lua对unicode没有任何支持(除了接受字符串中的任何字节值).然而,库slnunicode有很多unicode字符串函数.例如unicode.utf8.len.
(注意:这个答案完全是从格罗姆对另一个问题的评论中偷来的 - 我认为它应该得到自己的答案)
如果你想要一个简短的答案,那就是链接网站上的"是和否".
Lua支持Unicode,支持在字符串中指定,存储和查询任意字节值,因此您可以将任何类型的Unicode编码编码字符串存储在Lua字符串中.
不支持的是unicode字符迭代,unicode字符等字符串长度没有标准函数.所以更高级别的Unicode支持(如Python中可用的长度,低 - >大写转换,编码在任意编码等)不可用.