Lua支持Unicode吗?

Lua支持Unicode吗?,unicode,programming-languages,lua,Unicode,Programming Languages,Lua,基于下面的链接,我对Lua编程语言是否支持Unicode感到困惑 看起来确实如此,但有局限性。我只是不明白,这个限制有什么大的/关键的还是没什么大不了的?它支持它,因为您可以在Lua字符串中使用Unicode。这具体取决于您计划做什么,但通过使用您自己的功能扩展Lua,可以相当容易地克服大多数限制。如果您想要简短的回答,请在链接站点上输入“是”和“否” Lua支持Unicode,因为它支持在字符串中指定、存储和查询任意字节值,因此您可以在Lua字符串中存储任何类型的Unicode编码字符串 不

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


看起来确实如此,但有局限性。我只是不明白,这个限制有什么大的/关键的还是没什么大不了的?

它支持它,因为您可以在Lua字符串中使用Unicode。这具体取决于您计划做什么,但通过使用您自己的功能扩展Lua,可以相当容易地克服大多数限制。

如果您想要简短的回答,请在链接站点上输入“是”和“否”

Lua支持Unicode,因为它支持在字符串中指定、存储和查询任意字节值,因此您可以在Lua字符串中存储任何类型的Unicode编码字符串


不支持的是unicode字符的迭代,unicode字符中没有字符串长度的标准函数等。因此,更高级别的unicode支持(如Python中提供的长度、小写->大写转换、任意编码等)不可用。

Lua不支持unicode(除了接受字符串中的任何字节值)。然而,该库有很多unicode字符串函数。例如
unicode.utf8.len

(注意:这个答案完全是从格罗姆对另一个问题的评论中偷来的——我只是认为它应该有自己的答案)

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

但是,Lua不提供对此类字符串的高级“unicode感知”操作的任何默认支持,例如,以字符计算字符串长度、将小写转换为大写等。这种缺失对您是否有意义,取决于您打算对这些字符串执行什么操作

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

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

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

    例如,您可以附加字符串,在ascii字符之前/之后拆分字符串,等等。例如,如果您有一个字符串
    “開発.txt“
    然后使用
    string.find(string_var,”)
    在该字符串中搜索“.”,然后使用普通的
    string.sub
    函数将其拆分为
    ”開発"
    “.txt”
    ,这些结果字符串将是正确的utf8字符串,即使您没有使用任何类型的“unicode感知”算法

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

  • 一些支持utf8的操作非常简单,只需编写自己的函数即可完成

    例如,要计算字符串的unicode字符长度,只需计算高位为零的字符数(ASCII字符)和顶端两位
    11
    (“前导字节”表示非ASCII字符)的字符数;长度是这两位的总和

  • 对于更复杂的操作,例如,非ASCII字符的大小写转换等,您可能必须使用Lua unicode库,例如(前面提到的)上的库

  • 现在已经发布了,随附

    您可以使用
    utf8
    库执行有关UTF-8编码的操作,例如获取UTF-8字符串的长度(而不是像
    string.len
    那样的字节数),匹配每个字符(而不是字节),等等


    除了编码之外,它不提供本机支持,比如这个字符是中文字符吗?

    注意,在底部有链接,可以获得更高级别的Unicode支持。