Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Utf 8 如何在lua中将UTF8字节数组转换为字符串_Utf 8_Lua_Bytearray_Unpack - Fatal编程技术网

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
->->€