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

Tzu*_*hay 9 unicode lua

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

>>> unichr(0)
u'\x00'
Run Code Online (Sandbox Code Playgroud)

我怎样才能在Lua中定义它?

Nic*_*las 10

没有一个.

Lua没有Unicode值的概念.lua没有统一的概念可言.所有Lua字符串都是8位"字符"序列,所有Lua字符串函数都将这样处理.Lua不会将字符串视为具有任何Unicode编码; 它们只是一个字节序列.

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

"\065\066"
Run Code Online (Sandbox Code Playgroud)

相当于:

"AB"
Run Code Online (Sandbox Code Playgroud)

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

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

"x\226\131\151"
Run Code Online (Sandbox Code Playgroud)

这是Unicode组合上箭头字符x后跟随的字符.

但由于没有Lua函数实际上理解UTF-8,因此您必须公开一些需要UTF-8字符串的函数,以便它以任何方式有用.


Tzu*_*hay 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
Run Code Online (Sandbox Code Playgroud)


Iva*_*hek 5

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

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