在Lua语言中,当我想获得单个阿拉伯字母的长度(例如"ف"
)时,答案将为2
!
例
local letter = "ف"
print( letter:len() )
输出:2
使用(string.sub(a,b))
时会出现同样的问题。如果我想打印阿拉伯语单词的第一个字母,我就不能说(string.sub(1,1)
。
实施例。
local word_1 = "فولت"
print( word_1:sub(1,2) )
输出:ف
如你所见,我把第二个参数(2)不是(1)来得到正确的答案
如果我把第一个参数1给出答案将是:
print( word_1:sub(1,1) )
输出:Ù
为什么Lua将单个阿拉伯字母的长度计为两个?
有没有办法获得正确的长度,即1?
答案 0 :(得分:15)
Lua是8位清洁。
换句话说,Lua字符串是一个字节序列,它不支持内部Unicode。阿拉伯字母"ف"
有2个字节,因此Lua将其视为长度为2的字符串。
您需要使用特殊技巧来操作Unicode,例如,假设使用UTF-8,您可以使用此代码段来计算字符串的长度(Referece:Lua Unicode):
local _, count = string.gsub(unicode_string, "[^\128-\193]", "")
答案 1 :(得分:1)
答案 2 :(得分:0)
Lua是8位干净就足以说Lua支持Unicode了。虽然没有额外的unicode支持库,但支持程度很小。 对于任何Unicode字符串,至少有4种方法可以测量它:代码单元,代码点,Grapheme集群。第四种方式是bytecount,它是代码单元的常数倍,具体取决于使用的UTF。 UTF-8:1 UTF16:2 UTF32:4。 所以,清楚地想一想你需要哪些措施。