Lua unicode,使用 string.sub() 和两字节字符

REU*_*USS 4 string unicode lua utf-8 char

例如:我想删除字符串“??????”的前 2 个字母 和“你好”。其中之一仅包含两字节 unicode 符号。

尝试使用 string.sub("??????") 和 string.sub("HELLO.")

得到“????和“ LLO ”。

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

一些东西,比如 utf8.sub()

lhf*_*lhf 9

此任务的关键标准函数是utf8.offset(s,n),它给出 s 第 n 个字符的起始位置(以字节为单位)。

所以试试这个:

print(string.sub(s,utf8.offset(s,3),-1))
Run Code Online (Sandbox Code Playgroud)

您可以定义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
Run Code Online (Sandbox Code Playgroud)

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