Lua字符串字符编码

3

我看不出Lua使用什么编码来表示其字符串。

我正在使用

string.byte (s [, i [, j]])

它的文档如下:

返回字符s[i]、s[i+1],···,s[j]的内部数字代码。i的默认值为1;j的默认值为i。请注意,数字代码在不同平台上可能不可移植。

人们普遍认为它使用ASCII - 这对我来说是可以接受的 - 但我不明白跨平台变化的原因 - 我认为使用单一编码(如ASCII)的本质就是不会发生这种情况 - 还是说它只是因为ASCII没有定义超过126(或127),因此不同的国家/ OEMS / OS等可能在上限范围内使用定制的ASCII扩展自几十年前?

对于我来说,知道[a-zA-Z]在我运行的所有平台上具有相同的字符值非常重要。

Lua文档在这里可能需要更加具体!

如果有任何人能给出解答,那将非常感谢。


2
“Lua文档在这里可能需要更具体的说明!”不,它不能;它是经过设计的可移植性。每个构建者都应该提供这样的文档。 - Tom Blodget
1个回答

5
我相信您可以安全地假设使用基于ASCII的编码。因此,您感兴趣的小字符集保持不变。
关于代码在平台之间更改的注释可能意味着Lua根本不知道字符编码,因此只是使用操作系统提供的任何字节。在Linux上,这可能是UTF-8,这意味着当跨出ASCII范围时,您必须处理单个代码单元。在Windows上,我可以想象它是系统的传统代码页,在大部分西方世界中,这意味着类似于Latin 1(CP 1252)。

+1 谢谢。您是否知道是否有任何编码实际上是默认的系统编码,并具有[a-zA-z]的不同字符代码? - Dori
1
现在有EBCDIC,但它在正常系统上主要是一个遗留问题(但在金融界仍然非常活跃)。现在你很少会遇到不是ASCII派生的东西。 - Joey
3
“Lua在字符编码方面完全不知道任何信息”,这基本上取决于Lua构建在其上的库,这些库大多将OS机制作为默认值。因此,可以通过使用不同的工具集或配置重新构建Lua,使用不同的操作系统,更改操作系统设置,更改操作系统中的用户设置或更改线程设置(Lua之外)来影响或确定它。 - Tom Blodget

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接