我在那里读了一些字符串: http://www.lua.org/pil/2.4.html
Lua 八位干净,因此字符串可能包含任意数字的字符,包含嵌入的零。
八位清洁是什么意思?
为什么它可以包含任何数字值的字符? (与基本c字符串不同)
答案 0 :(得分:9)
存储字符串有两种常用方法:
当你使用#1时,你需要“牺牲”一个角色作为终结者;当你使用#2时,你没有这样的限制。
C使用第一种存储字符串的方法。它使用字符零作为终结符;其他255个字符可用于表示字符串的字符。
Lua使用第二种存储字符串的方法。所有256个可能的字符值(包括零)都可以在Lua字符串中使用。例如,您可以使用字符'A'
,0
,'B'
构造三个字符的字符串,Lua会将其视为三个字符的字符串。您可以在C中构造相同的字符串,但其字符串处理库会将其视为单字符字符串:strlen
将返回1
,puts
将写入字符{{1}停止等等。
答案 1 :(得分:0)
Lua字符串类型是计数的字节序列。一个字节可以保存0到255之间的任何值。
字符串类型用于字符串。你是对的,很少有字符集编码允许任何字节值或字节值序列。代码页437是一个;它将256个字符映射到256个值,每个字符一个字节。 Windows-1252没有;它将251个字符映射到251个值,每个字符一个字节。 UTF-8将1,112,064个字符映射到一到四个字节的序列,其中不使用某些字节值,并且不使用某些值序列。
Lua字符串库确实具有将字节视为字符的函数。它们的行为受实现库的影响,这些库通常使用C运行时及其语言环境特性。
Lua有专门的库来显式处理各种字符集编码。