Lua是否支持Unicode?

时间:2010-03-23 05:37:59

标签: unicode programming-languages lua

基于以下链接,我对Lua编程语言是否支持Unicode感到困惑。

http://lua-users.org/wiki/LuaUnicode

它似乎确实有但有局限性。我根本就不明白,这个限制是什么大/关键还是没什么大不了的?

5 个答案:

答案 0 :(得分:17)

你当然可以在lua中存储 unicode字符串,如utf8。您可以像使用任何字符串一样使用它们。

然而,Lua没有为这些字符串提供对更高级别“unicode感知”操作的任何默认支持 - 例如,计算字符串中的字符串长度,转换从低到大的情况等等。这种缺陷是否有意义你真的取决于你打算用这些字符串做什么。

可能的方法,取决于您的使用:

  1. 如果您只想输入/输出/存储字符串,并且通常将它们用作“整个单元”(用于表索引等),您可能根本不需要任何特殊处理。在这种情况下,您只需将这些字符串视为二进制blob。

  2. 由于utf8的巧妙设计,可以对包含utf8的字符串进行某些类型的字符串操作,并且无需特别注意即可产生正确的结果。

    例如,您可以追加字符串,在ascii字符之前/之后将它们分开等等。例如,如果您有字符串"開発.txt"并且搜索“。”。在该字符串中使用string.find (string_var, "."),然后使用普通string.sub函数将其拆分为"開発"".txt",即使您不是,这些结果字符串也将是正确的utf8字符串使用任何一种“unicode-aware”算法。

    类似地,您可以仅对字符串中的ASCII字符(具有高位零的字符)进行大小写转换,并将其余字符串视为二进制而不会将其搞砸。

  3. 一些支持utf8的操作非常简单,只需编写一个自己的函数即可。

    例如,要计算字符串的unicode-characters的长度,只需计算高位零(ASCII字符)的字符数,以及前两位11的字符数(非ASCII字符的“前导字节”);长度是这两者的总和。

  4. 对于更复杂的操作 - 例如,非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,可以很容易地解决大多数限制。