Lua中阿拉伯字母的长度

时间:2014-01-15 13:23:08

标签: string unicode lua arabic

在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?

3 个答案:

答案 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)

Lua 5.3现已发布。它提供了一个基本的UTF-8库。

utf8.len可用于获取UTF-8字符串的长度:

print(utf8.len("ف"))
-- 1

答案 2 :(得分:0)

Lua是8位干净就足以说Lua支持Unicode了。虽然没有额外的unicode支持库,但支持程度很小。 对于任何Unicode字符串,至少有4种方法可以测量它:代码单元,代码点,Grapheme集群。第四种方式是bytecount,它是代码单元的常数倍,具体取决于使用的UTF。 UTF-8:1 UTF16:2 UTF32:4。 所以,清楚地想一想你需要哪些措施。