Utf 8 如何在lua中将UTF8字节数组转换为字符串
我有一张这样的桌子Utf 8 如何在lua中将UTF8字节数组转换为字符串,utf-8,lua,bytearray,unpack,Utf 8,Lua,Bytearray,Unpack,我有一张这样的桌子 table = {57,55,0,15,-25,139,130,-23,173,148,-24,136,158} 它是由php解包函数utf8编码的字节数组 unpack('C*',$str); 如何将其转换为可以在lua中读取的utf-8字符串?lua没有提供将数字形式的utf-8字节表转换为utf-8字符串文字的直接函数。但是,借助string.char,很容易为此编写一些东西: function utf8_from(t) local bytearr = {}
table = {57,55,0,15,-25,139,130,-23,173,148,-24,136,158}
它是由php解包函数utf8编码的字节数组
unpack('C*',$str);
如何将其转换为可以在lua中读取的utf-8字符串?lua没有提供将数字形式的utf-8字节表转换为utf-8字符串文字的直接函数。但是,借助
string.char
,很容易为此编写一些东西:
function utf8_from(t)
local bytearr = {}
for _, v in ipairs(t) do
local utf8byte = v < 0 and (0xff + v + 1) or v
table.insert(bytearr, string.char(utf8byte))
end
return table.concat(bytearr)
end
功能utf8\u来自(t)
本地bytearr={}
对于ipairs(t)do中的v
本地utf8byte=v<0和(0xff+v+1)或v
table.insert(bytearr,string.char(utf8byte))
结束
返回表concat(bytearr)
结束
请注意,lua的标准函数或提供的字符串工具都不支持utf-8。如果您尝试打印从上述函数返回的utf-8编码字符串,您只会看到一些时髦的符号。如果您需要更广泛的utf-8支持,您可能希望查看中提到的一些库。这里有一个适用于受RFC 3629限制的utf-8字符集的综合解决方案:
do
本地字节标记={0x7FF,192},{0xFFFF,224},{0x1ffff,240}
函数utf8(十进制)
如果是小数,这些数字代表什么?它们应该是utf-8编码的代码点、需要转换的实际数字文本还是什么?它是由php解包函数生成的utf8编码字节数组。我刚刚用一个更优雅(不使用字符串进行二进制计算)、更短,因此速度也快了大约5倍的实现替换了旧的实现。其他优化(编辑到上面)提供另外2倍或更高的性能增益。如何将此func与类似so s的字符串一起使用=“\xD0\x9C\xD0\xBE\xD1\x81\xD0\xBA\xD0\xB2\xD0\xB0”-1:不处理3字节和4字节UTF8字符,如U+20AC
->->€