1

Lua が Unicode を完全にサポートしていないことは知っていましたが、この問題を解決するための回避策が必要ですか? string.reverse はユニコードでは機能しないため、次の例は機能しません

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

それについて何か助けはありますか?

4

1 に答える 1

5

Corona SDK はエンコーディングに UTF-8 を使用しているようです。

すべてのバイトではなく、文字列内のすべての Unicodeコード ポイントを逆にしたい場合は、そのコードを使用できます。

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

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

トリックは次のとおりです。マルチバイト Unicode コード ポイントは常にバイト11xx xxxxで始まり、1 つまたは複数のバイト10xx xxxxが続きます。最初のステップは、各マルチバイト コード ポイントのすべてのバイトを反転し、次にすべてのバイトを反転することです。

注: Unicode 文字が複数のコード ポイントで構成されている場合、その単純なトリックは機能しません。完全なサポートには、対処するための大きな Unicode データベースが必要になります。

于 2012-10-28T19:46:59.450 に答える