在lua中代表unichar的方式是什么?

时间:2011-10-15 19:39:23

标签: unicode lua

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

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

如何在Lua中定义它?

4 个答案:

答案 0 :(得分:10)

没有一个。

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字符串的函数才能使它在任何方面都有用。

答案 1 :(得分:5)

怎么样

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

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

  

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