Lua Unicode,使用string.sub()处理双字节字符

4
例如:我想从字符串“ПРИВЕТ”和“HELLO。”中删除前2个字母,其中一个只包含两个字节的unicode符号。
尝试使用string.sub("ПРИВЕТ")和string.sub("HELLO.")。
得到"Р ИВЕТ "和" LLO. "。
string.sub()从这些字符串中删除了2个字节(而不是字符)。因此,我想知道如何去除 chars 类似于utf8.sub()的东西。

2
要从UTF-8字符串中删除前N个字符:str = str:gsub(".[\128-\191]*", "", N) - Egor Skriptunoff
3个回答

13

这项任务的关键标准函数是utf8.offset(s,n),它可以提供字符串s中第n个字符的起始字节位置。

因此,试试这个:

print(string.sub(s,utf8.offset(s,3),-1))

你可以如下定义 utf8.sub

function utf8.sub(s,i,j)
    i=utf8.offset(s,i)
    j=utf8.offset(s,j+1)-1
    return string.sub(s,i,j)
end

(此代码仅适用于正数j。有关通用情况,请参见http://lua-users.org/lists/lua-l/2014-04/msg00590.html。)


0

-1

我找到了一个更简单的解决方案(使用offset()的解决方案并不适用于我的所有情况):

function utf8.sub(s, i, j)
    return utf8.char(utf8.codepoint(s, i, j))
end

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