基于以下链接,我对Lua编程语言是否支持Unicode感到困惑。
http://lua-users.org/wiki/LuaUnicode
它似乎确实有但有局限性。我根本就不明白,这个限制是什么大/关键还是没什么大不了的?
答案 0 :(得分:17)
你当然可以在lua中存储 unicode字符串,如utf8。您可以像使用任何字符串一样使用它们。
然而,Lua没有为这些字符串提供对更高级别“unicode感知”操作的任何默认支持 - 例如,计算字符串中的字符串长度,转换从低到大的情况等等。这种缺陷是否有意义你真的取决于你打算用这些字符串做什么。
可能的方法,取决于您的使用:
如果您只想输入/输出/存储字符串,并且通常将它们用作“整个单元”(用于表索引等),您可能根本不需要任何特殊处理。在这种情况下,您只需将这些字符串视为二进制blob。
由于utf8的巧妙设计,可以对包含utf8的字符串进行某些类型的字符串操作,并且无需特别注意即可产生正确的结果。
例如,您可以追加字符串,在ascii字符之前/之后将它们分开等等。例如,如果您有字符串"開発.txt"
并且搜索“。”。在该字符串中使用string.find (string_var, ".")
,然后使用普通string.sub
函数将其拆分为"開発"
和".txt"
,即使您不是,这些结果字符串也将是正确的utf8字符串使用任何一种“unicode-aware”算法。
类似地,您可以仅对字符串中的ASCII字符(具有高位零的字符)进行大小写转换,并将其余字符串视为二进制而不会将其搞砸。
一些支持utf8的操作非常简单,只需编写一个自己的函数即可。
例如,要计算字符串的unicode-characters的长度,只需计算高位零(ASCII字符)的字符数,以及前两位11
的字符数(非ASCII字符的“前导字节”);长度是这两者的总和。
对于更复杂的操作 - 例如,非ASCII字符的大小写转换等 - 您可能必须使用Lua unicode库,例如(前面提到的){{3}上的那些}
答案 1 :(得分:9)
Lua对unicode没有任何支持(除了接受字符串中的任何字节值)。但是,库slnunicode有很多unicode字符串函数。例如unicode.utf8.len
。
(请注意:这个答案完全是从格罗姆对另一个问题的评论中偷来的 - 我认为它应该得到自己的答案)
答案 2 :(得分:6)
如果您想要一个简短的答案,那就是链接网站上的“是和否”。
Lua支持Unicode,支持在字符串中指定,存储和查询任意字节值,因此您可以将任何类型的Unicode编码编码字符串存储在Lua字符串中。
不支持的是unicode字符的迭代,unicode字符等中的字符串长度没有标准函数。所以Unicode支持的更高级别(如Python中可用的长度,低 - > upper大小写转换,任意编码编码等)不可用。
答案 3 :(得分:3)
Lua 5.3现已发布。它附带a basic UTF-8 library。
您可以使用utf8
库来执行有关UTF-8编码的操作,例如获取UTF-8字符串的长度(不是string.len
的字节数),匹配每个字符(不是字节)等。
它不提供编码以外的本机支持,例如这个字符是中文字符吗?
答案 4 :(得分:0)
它支持它,因为你可以在Lua字符串中使用Unicode。具体取决于你打算做什么,但是通过使用你自己的函数扩展Lua,可以很容易地解决大多数限制。