【问题标题】:what is the way to represent a unichar in lua在 lua 中表示 unichar 的方法是什么
【发布时间】:2011-10-15 19:39:23
【问题描述】:

如果我需要以下 python 值,unicode char '0':

>>> unichr(0)
u'\x00'

如何在 Lua 中定义它?

【问题讨论】:

    标签: unicode lua


    【解决方案1】:

    没有。

    Lua 没有 Unicode 值的概念。 Lua 根本没有 Unicode 的概念。所有 Lua 字符串都是 8 位的“字符”序列,所有 Lua 字符串函数都会这样对待它们。 Lua 不将字符串视为具有任何 Unicode 编码。它们只是一个字节序列。

    您可以在字符串中插入任意数字。例如:

    "\065\066"
    

    相当于:

    "AB"
    

    \ 符号后跟 3 位数字(或其中一个转义字符),必须小于或等于 255。Lua 完全能够处理嵌入了 \000 字符的字符串。

    但您不能直接将 Unicode 代码点插入 Lua 字符串。您可以将代码点分解为 UTF-8 并使用上述机制将代码点插入字符串。例如:

    "x\226\131\151"
    

    这是x 字符,后跟Unicode combining above arrow character

    但由于没有 Lua 函数真正理解 UTF-8,因此您必须公开一些需要 UTF-8 字符串的函数才能使其在任何方面都有用。

    【讨论】:

      【解决方案2】:

      怎么样

      function unichr(ord)
          if ord == nil then return nil end
          if ord < 32 then return string.format('\\x%02x', ord) end
          if ord < 126 then return string.char(ord) end
          if ord < 65539 then return string.format("\\u%04x", ord) end
          if ord < 1114111 then return string.format("\\u%08x", ord) end
      end
      

      【讨论】:

      • 我不明白这如何回答您自己的问题。你真的只是在问如何格式化一个前面带有\u 的十六进制数字吗?
      • 问题的标题是-“在 lua 中 represent unichar 的方法是什么”-实际上我需要 lua 函数来输出与等效的 python 脚本相同的内容,因为有人来到更换另一个。显然,这已经足够了。
      【解决方案3】:

      虽然原生 Lua 不直接支持或处理 Unicode,但它的字符串实际上是任意字节的缓冲区,按照惯例可以保存 ASCII 字符。由于字符串可能包含任何字节值,因此在原生字符串之上构建对 Unicode 的支持相对简单。如果字节缓冲区被证明不够健壮,也可以使用userdata 对象来保存任何内容,并添加合适的元表,赋予它创建、转换为所需编码、连接、迭代的方法,以及其他任何需要的东西。

      a page at the Lua User's Wiki 讨论了在 Lua 程序中处理 Unicode 的各种方法。

      【讨论】:

        【解决方案4】:

        对于更现代的答案,Lua 5.3 现在有 utf8.char:

        接收零个或多个整数,将每个整数转换为其对应的 UTF-8 字节序列,并返回一个包含所有这些序列连接的字符串。

        【讨论】:

          猜你喜欢
          • 2011-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-07
          • 1970-01-01
          • 1970-01-01
          • 2010-11-19
          相关资源
          最近更新 更多