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

例如:我想从字符串"ПРИВЕТ"和"HELLO."中删除前两个字母之一只包含双字节Unicode符号。

尝试使用string.sub("ПРИВЕТ")和string.sub("HELLO.")

得到"РИВЕТ"和" LLO.".

string.sub()从这些字符串中删除了2个字节(而不是字符)。所以我想知道如何获取字符的删除

类似于utf8.sub()的内容

点赞
用户107090
用户107090

这个任务的关键标准函数是 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。)

2017-03-31 11:01:27
用户14557805
用户14557805

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

function utf8.sub(s, i, j)
    return utf8.char(utf8.codepoint(s, i, j))
end
2020-11-01 09:33:19
用户8301479
用户8301479

有一个纯 Lua 库 https://github.com/Stepets/utf8.lua,可以扩展标准的函数,以支持 utf8 字符串。

2020-11-17 14:44:31