2

我需要为我的应用程序(不是游戏)编写脚本,但我遇到了一个问题,为此选择了脚本语言。Lua 看起来不错(实际上,它非常适合我的任务),但它在 unicode 字符串方面存在问题,将使用它。另外,我考虑过 Python,但我不喜欢它的语法,而且它的 Dll 对我来说太大(大约 2.5 Mib)。Python 和其他这样的语言有太多我不需要的功能、电池和模块(例如 I/O 功能)——脚本只需要实现逻辑,所有其他的都会做我的应用程序。所以,我想知道是否有满足此条件的脚本语言:

  • Unicode 字符串
  • 我可以导入 C++ 函数,然后从脚本中调用它们
  • 可以毫无问题地嵌入到应用程序(无 dll)

重新发明轮子不是一个好主意,所以我不想开发自己的 lang。或者有一种方法可以在 Lua 的源代码中编写 unicode 字符串?就像在 C++ L“Unicode 字符串”中一样

4

5 回答 5

7

Lua 字符串与编码无关。所以,是的,您可以在 Lua 脚本中编写 unicode 字符串。如果您需要模式匹配,那么标准 Lua 字符串库不支持 unicode 类。但是普通的子字符串搜索有效。

于 2012-04-21T19:45:43.437 回答
5

没有真正的“unicode 字符串”这样的东西。字符串是可以包含任何内容的字节序列。但是,知道字符串中数据的编码很重要。

我使用 Lua 和UTF-8 字符串,它只适用于我关心的所有操作。我不使用任何 Unicode 字符串库,尽管它们可用于 Lua(ICU4Luaslnunicode等)。

关于在 Lua 中使用 UTF-8 字符串的一些注意事项:

  • 字符串长度(# 运算符)返回以字节为单位的字符串长度,而不是字符或代码点(非 ASCII 字符可能是多个字节的序列)。
  • 字符串拆分(例如 string.sub)不得拆分 UTF-8 序列。
  • 字符串匹配(string.find、string.match)适用于 ASCII 模式。
  • 子字符串搜索(例如 'plain' 模式下的 string.find)使用 UTF-8 作为针或干草堆。

以 UTF-8 计算代码点非常简单,但效率略低于其他编码。例如在 Lua 中:

function utf8_length(str)
        return select(2, string.gsub(str, "[^\128-\193]", ""));
end

如果您需要的不仅仅是这种东西,我提到的 unicode 库为您提供了所有 API,包括编码之间的转换。

就我个人而言,我更喜欢这种直接的方法,而不是任何强制你使用某种 unicode 风格的语言(例如 Javascript),或者尝试通过在语言中内置多种编码来变得聪明(例如 Python)。根据我的经验,它们只会导致头痛和性能瓶颈。

无论如何,我认为每个开发人员都应该对 unicode 的工作原理以及不同编码之间的原理差异有一个很好的基本了解,以便他们可以就如何在他们的应用程序中处理 unicode 做出最佳选择。

例如,如果您的应用程序中所有现有的字符串都采用宽字符编码,那么使用 Lua 就不太方便,因为您必须为进出 Lua 的每个字符串添加转换。这是完全可能的,但如果您的应用程序可能受 CPU 限制(如在游戏中),那么这将是一个负面的性能方面。

于 2012-04-22T14:44:41.943 回答
1

看一下 JavaScript - V8 引擎非常强大,而且 JavaScript 没有大的标准库。除此之外,您可以轻松地嵌入它,并且据我所知它可以很好地处理 unicode。

于 2012-04-21T19:27:42.593 回答
0

看看Io

它一直是unicode并且可以嵌入。它似乎还提供了一些C++ 绑定库

于 2012-04-22T10:13:25.577 回答
0

看看Jim Tcl。它体积小,易于嵌入和扩展,支持 UTF-8 字符串,而且非常强大

于 2012-04-23T19:23:54.957 回答