如果我需要具有以下python值,则unicode char'0':
>>> unichr(0)
u'\x00'
如何在Lua中定义它?
答案 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字节序列,并返回一个字符串,其中包含所有这些序列的串联。