Lua中阿拉伯字母的长度

Ali*_*Ali 10 string unicode lua arabic

在Lua语言中,当我想获得单个阿拉伯字母(例如"?")的长度时,答案就是2!

防爆.

local letter = "?"
print( letter:len() )
Run Code Online (Sandbox Code Playgroud)

输出: 2

我使用时会出现同样的问题(string.sub(a,b)).如果我想打印阿拉伯语单词的第一个字母,我不能说(string.sub(1,1).

防爆.

local word_1 = "????"
print( word_1:sub(1,2) )
Run Code Online (Sandbox Code Playgroud)

输出: ?
如你所见,我把第二个参数(2)不是(1)来得到正确的答案.
如果我把第一个参数1给出答案将是:

print( word_1:sub(1,1) )
Run Code Online (Sandbox Code Playgroud)

输出: Ù

为什么Lua将单个阿拉伯字母的长度计为两个?

有没有办法获得正确的长度,即1?

Yu *_*Hao 15

Lua是8位清洁.

换句话说,Lua字符串是一个字节序列,它不支持内部Unicode.阿拉伯字母"?"有2个字节,因此Lua将其视为长度为2的字符串.

您需要使用特殊技巧来操作Unicode,例如,假设使用UTF-8,您可以使用此片段来计算字符串的长度(Referece:Lua Unicode):

local _, count = string.gsub(unicode_string, "[^\128-\193]", "")
Run Code Online (Sandbox Code Playgroud)