开发cocos-lua游戏时,Android中string.find中文字符失败,PC上成功

2024-01-03

我尝试使用string.find("中国", "中")。我开发cocos-lua游戏时,在PC上成功,但在Android上失败。

在安卓上,string.find return nil

首先,我认为它们的编码可能不同,所以我尝试打印出它们的字节。

Android 上:text1:“中国”,text2:“中”。

local text1 = self.__editBox2:getText()
local text2 = self.__editBox3:getText()
local code1 = ""
for i = 1, string.len(text1) do
    code1 = code1 .. "-" .. tostring(string.byte(text1, i))
end

local code2 = ""
for i = 1, string.len(text2) do
    code2 = code2 .. "-" .. tostring(string.byte(text1, i))
end

self.__editBox2:setText(code1)


self.__editBox3:setText(code2)

local a, b = string.find(text1, text2)
local data = tostring(a) .. ":" .. tostring(b)
self.__editBox1:setText(data)

text1:

228-184-173-229-155-189

text2:

228-184-173

答案依然是:

nil:nil

PS:lua实现string.find

static int str_find_aux (lua_State *L, int find) {
  size_t l1, l2;
  const char *s = luaL_checklstring(L, 1, &l1);
  const char *p = luaL_checklstring(L, 2, &l2);
  ptrdiff_t init = posrelat(luaL_optinteger(L, 3, 1), l1) - 1;
  if (init < 0) init = 0;
  else if ((size_t)(init) > l1) init = (ptrdiff_t)l1;
  if (find && (lua_toboolean(L, 4) ||  /* explicit request? */
      strpbrk(p, SPECIALS) == NULL)) {  /* or no special characters? */
    /* do a plain search */
    const char *s2 = lmemfind(s+init, l1-init, p, l2);
    if (s2) {
      lua_pushinteger(L, s2-s+1);
      lua_pushinteger(L, s2-s+l2);
      return 2;
    }
  }
  else {
    MatchState ms;
    int anchor = (*p == '^') ? (p++, 1) : 0;
    const char *s1=s+init;
    ms.L = L;
    ms.src_init = s;
    ms.src_end = s+l1;
    do {
      const char *res;
      ms.level = 0;
      if ((res=match(&ms, s1, p)) != NULL) {
        if (find) {
          lua_pushinteger(L, s1-s+1);  /* start */
          lua_pushinteger(L, res-s);   /* end */
          return push_captures(&ms, NULL, 0) + 2;
        }
        else
          return push_captures(&ms, s1, res);
      }
    } while (s1++ < ms.src_end && !anchor);
  }
  lua_pushnil(L);  /* not found */
  return 1;
}


static int str_find (lua_State *L) {
  return str_find_aux(L, 1);
}

Lua 没有对 unicode 字符提供适当的支持,但是有一些很好的库可以解决这个问题。我从未使用过 cocos2d,我不确定他们是否有任何附加组件来处理这个问题。但你可以尝试使用这个:https://luarocks.org/modules/xavier-wang/luautf8 https://luarocks.org/modules/xavier-wang/luautf8。我用过一次就成功了。希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开发cocos-lua游戏时,Android中string.find中文字符失败,PC上成功 的相关文章

  • Lua 中的“主”函数?

    在 python 中 通常会定义一个 main 函数 以便允许脚本用作模块 如果需要 def main print Hello world return 0 if name main sys exit main 在Lua中 这个习语if n
  • 如何将 Lua 嵌入到 Python 3.x 中?

    是否可以将 Lua 嵌入到 Python 3 x 中 如果是这样 我如何在我的 Python 程序中运行和执行 Lua 脚本 语言之间的交互有多好 例如 Lua 是否可以访问 Python 的所有变量和类以及 Python 是否可以访问 L
  • Lua:“拖动”数组中的元素序列

    我正在尝试创建一个函数 将连续数量的元素 拖动 到数组中的新位置 并限制为数组的当前大小 其他项目应该围绕 拖动 的项目晃动 例如 如果我的数组有 7 个元素 并且我想拖动中间的三个 1 2 3 4 5 6 7 lt keys a b C
  • LuaJit FFI 从 C 函数返回字符串到 Lua?

    假设我有这个 C 函数 declspec dllexport const char GetStr static char buff 32 Fill the buffer with some string here return buff 这
  • 创建独立的 Lua 可执行文件

    有没有一种简单的方法可以从 Lua 脚本创建独立的 exe 文件 基本上这将涉及链接 Lua 解释器和脚本 我相信这是可能的 PLT 方案允许以相同的方式创建独立的可执行文件 但是到底是如何实现的呢 查看srlua http www tec
  • C 的哪些部分最可移植?

    我最近读到了 Lua 联合创始人 Luiz H de Figueredo 和 Roberto Ierusalimschy 的采访 他们讨论了 Lua 的设计和实现 至少可以说这是非常有趣的 然而 讨论的一部分让我想起了一些事情 Robert
  • 如何解密Lua字节码?

    早上好 我正在尝试破译 Moon 字节码 但我无法以任何方式 有人可以帮助我吗 我有这个 例如 code 27 76 117 97 81 0 1 4 4 4 8 0 如何将此字节码解密为文本 我已经在这里搜索 http www asciit
  • 用于嵌入式服务器的 Web 技术

    我最近开始了一个针对嵌入式设备的新 Web 开发项目 并希望征求一些有关使用技术的建议 该设备将提供 HTML 页面 其中包括用于从 JSON 服务器检索数据的 AJAX 代码 我们暂时使用 Cherokee 作为 Web 服务器 但我们并
  • lua_resume 的 from 参数的含义

    From Lua 5 2 参考手册 http www lua org manual 5 2 manual html lua resume int lua resume lua State L lua State from int nargs
  • Lua :: 如何编写加载多个CPU的简单程序?

    我还无法用 Lua 编写一个可以加载多个 CPU 的程序 自从Lua通过协程支持这个概念 http www lua org pil 9 4 html 我相信这是可以实现的 我失败的原因可能是以下之一 这在Lua中是不可能的 我写不出来 an
  • VB6 - Lua 集成

    我想知道是否有人有任何集成 Lua 和 VB6 的技巧 我正在运行一个小型在线角色扮演游戏 添加一些脚本会很棒 嗯 这是可行的 我曾经为 Lua 5 0 2 做过 但找不到文件 在您拥有的选项中 您可以 将 Lua 封装在公开 Lua AP
  • 在Lua中获取前一天的日期

    谁能告诉我如何使用 Lua 获取 YYYY MM DD 格式的前一天日期 即 一个片段 它将返回运行当天的前一天的日期 Try print os date Y m d os time 24 60 60 严格来说 这只能保证在 POSIX 系
  • Openresty 中的并发模型是什么?

    我很难理解 openresty 或 nginx 的并发模型 我读了Lua变量作用域 http wiki nginx org HttpLuaModule Lua Variable Scope 它解释了变量的生命周期 但它没有说明对它们的并发访
  • 如何在lua中获取shell脚本的返回码?

    我正在lua中执行一个脚本 os execute sh manager scripts update system sh f 我想获得脚本的输出 如果退出状态为 7 则返回 7 I tried local output os execute
  • 如何通过 C API 在自己的环境中执行不受信任的 Lua 文件

    我想通过调用在其自己的环境中执行不受信任的 lua 文件lua setfenv http pgl yoyo org luai i lua setfenv这样它就不会影响我的任何代码 该函数的文档仅解释了如何调用函数 而不解释如何执行文件 目
  • 如何终止Lua脚本?

    如何终止 Lua 脚本 现在我在 exit 方面遇到问题 我不知道为什么 这更像是一个 Minecraft ComputerCraft 问题 因为它使用了包含的 API 这是我的代码 while true do if turtle dete
  • 关闭 Löve2D 中的抗锯齿功能

    我在用着L ve2D http love2d org用于编写一个小游戏 L ve2D 是 Lua 的开源游戏引擎 我遇到的问题是 当您在非整数位置绘制精灵时 某些抗锯齿过滤器会自动应用于精灵 love graphics draw sprit
  • 推送 Lua 表

    我已经创建了一个Lua表C 但我不知道如何将该表推入堆栈顶部 以便我可以将其传递给 Lua 函数 有谁知道如何做到这一点 这是我当前的代码 lua createtable state libraries size 0 int table i
  • Lua 上的 For 循环

    我的作业是如何执行 for 循环 我已经从数字上弄清楚了 但无法从名称上弄清楚 我想创建一个 for 循环来运行名称列表 以下是我到目前为止所拥有的 names John Joe Steve for names 1 3 do print n
  • 如何从 Lua 内部运行另一个脚本?

    我需要从另一个 Lua 脚本中执行一个 Lua 脚本 有多少种方法 我该如何使用它们 通常您会使用以下内容 dofile filename lua 但你可以通过以下方式做到这一点require 很好 例子 foo lua io write

随机推荐

  • 理解列表理解

    我对编程有点陌生 我创建了一个在其初始值设定项中使用列表理解的类 如下 class Collection of word counts this class has one instance variable called counts w
  • 套接字连接()与绑定()

    Both connect and bind 系统调用将套接字文件描述符 关联 到一个地址 通常是 IP 端口组合 他们的原型是这样的 int connect int sockfd const struct sockaddr addr soc
  • 清除 Android 中的 Glide 图像缓存

    我正在使用 glide 库来显示图像 我正在尝试使用以下代码清除滑动缓存 Glide get MainActivity this clearDiskCache Glide get MainActivity this clearMemory
  • 在 Ubuntu Linux 中运行的 CodeIgniter IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • addEventListener 与 onclick

    有什么区别addEventListener and onclick var h document getElementById a h onclick dothing1 h addEventListener click dothing2 上
  • 如何在 ubuntu 18.04.2 上访问 nuget 包管理器控制台

    所以我在我刚买的这台小笔记本电脑上安装了ubuntu 18 04 2 thinkpad x220 我正在尝试将其打造成一台可以在其上编写 ASP NET Core 应用程序的机器 然而 我一生都无法找到如何在 Ubuntu 终端的包管理器控
  • 什么时候需要 NS_RETURNS_RETAINED ?

    以下面的例子为例 NSString pcen NS RETURNS RETAINED return bridge transfer NSString CFURLCreateStringByAddingPercentEscapes NULL
  • Visual Studio 2010 启动时出现未知错误

    我正在尝试从桌面启动 Visual Studio 2010 但只是弹出此错误框 显示 未知错误 任何人都知道为什么会发生这种情况 我刚刚修复了它 卸载并重新安装了我的 NET Framework 版本 v4 0 然后 当我再次尝试启动 Vi
  • C 中的不透明(抽象)数据类型

    文件 api h include
  • Sublime Text 需要重新启动设置更改才能生效

    我的 Sublime Text 3 但也适用于 ST2 因为我在切换到 ST3 之前遇到了同样的问题 需要重新启动才能使任何设置更改生效 这种情况发生在办公室的 Mac Mini 上 但不会发生在我的 Macbook Pro 上 两者的设置
  • Android-Studio:错误:无法创建 Java 虚拟机

    我今天刚刚安装了Android studio 首先我必须为此 IDE 安装 jdk7 之后只有我能够启动 IDE 现在 当我尝试创建新项目时 出现错误 如下图所示 有人可以帮助我吗 我的身边缺少什么 就我而言 我更改了以下文件来修改虚拟机堆
  • 通过 C API 从字符串创建并调用 python 函数

    是否可以从字符串加载 python 函数 然后使用参数调用该函数并获取返回值 我正在使用 python C API 从我的 C 应用程序内部运行 python 代码 我可以使用以下命令从文件加载模块PyImport Import 从中获取一
  • 有 Yahoo 查询语言 (YQL) 的 .NET 示例吗?

    我想打一些简单的电话雅虎查询语言 YQL http developer yahoo com yql 有人在 NET 中实现过这个吗 这是我想从 NET 进行的查询 select MarketCapitalization from yahoo
  • Sammy 路由不工作

    我无法让 sammy js 路由按预期工作 我有以下 JavaScript function var app sammy main function this get function context context log start p
  • 硒未找到元素

    这是 HTML https www dropbox com s aiaw2u4j7dkmui2 Untitled 20picture png https www dropbox com s aiaw2u4j7dkmui2 Untitled
  • Newtonsoft.Json SerializeObject 不带转义反斜杠

    给出代码 dynamic foo new ExpandoObject foo Bar something string json Newtonsoft Json JsonConvert SerializeObject foo 输出如下 Ba
  • 在 JavaScript 中缩放到没有画布的光标

    我有一个 img 通过调整鼠标滚轮滚动来缩放transform scale 我希望缩放像 Google 地图一样 您可以缩放到鼠标光标所在的位置 而不是图像的中心 不过 我不想使用画布 只是为了学习体验 这也是我发现的其他问题并没有真正帮助
  • WSO2 Identity Server Service Pack 的来源

    WSO2 Identity Server 5 0 0 的 Service Pack 1 的源是否公开可用 我在哪里可以找到 SVN 存储库中的源代码 Service Pack 没有任何源代码 服务包是通过聚合为 WSO2 中的产品提供的补丁
  • Rails 中的 Kerberos 身份验证

    是否可以使用 kerberos 对 Rails 下的用户进行身份验证 是否有任何现有插件 最好是扩展 authlogic 的功能 来执行此操作 我希望其他人能够向我们展示一种纯粹的 Rails 方法来做到这一点 但在那之前 让事情顺利进行的
  • 开发cocos-lua游戏时,Android中string.find中文字符失败,PC上成功

    我尝试使用string find 中国 中 我开发cocos lua游戏时 在PC上成功 但在Android上失败 在安卓上 string find return nil 首先 我认为它们的编码可能不同 所以我尝试打印出它们的字节 Andr