在Corona SDK中,如何反转Unicode字符串?

我知道 Lua 不完全支持 Unicode,但应该有一种解决这个问题的方法吧? string.reverse 不支持 Unicode,所以下面的例子不起作用

  print(string.reverse("أحمد"))

有什么帮助吗?

点赞
用户1008957
用户1008957

Corona SDK 似乎使用 UTF-8 作为编码。

如果你想要反转一个字符串中所有的 Unicode 代码点,而不是所有字节,可以使用以下代码:

function utf8reverse(str)
  return str:gsub("([\194-\244][\128-\191]+)", string.reverse):reverse()
end

print(utf8reverse("أحمد"))

该代码的技巧是:多字节的 Unicode 代码点总是以一个字节11xx xxxx开头,并跟随一个或多个字节10xx xxxx。第一步是反转每个多字节代码点中的所有字节,然后再反转所有字节。

注意:当一个 Unicode 字符由多个代码点组成时,这个简单的技巧将不起作用。完整的支持需要一个大的 Unicode 数据库来处理。

2012-10-28 19:46:59