C++、Qt 调用 lua 完成简单计算并得到结果( 出现中文 ‘?’问题)

这几天有个小项目需要在运行过程中加载 lua 代码根据 C++ 传入的值 计算并返回计算结果和字符串,遇到一个烦心的问题,luaL_dostring 接口加载 lua 文件,运行后 c++ 从lua 中返回的中文正常,但使用 luaL_dofile 传入的 lua 代码段,执行后,C++ 获取到的字符 中文是 ‘?’

原因:
luaL_dostring 传入的字符串需要是 utf-8 的
luaL_dostring(L, biz.toLatin1().data()); 乱码
luaL_dostring(L, biz.toUtf8().data()); 正常

C++、Qt 代码

            //测试 luaL =  luaL_newstate();//新建lua解释器luaL_openlibs(L);//载入lua基础库// 我测试时 e:/test.lua 文件编码 为 utf-8 带不带bom 都不影响脚本中的中文部分
//            luaL_dofile(L,"e:/test.lua");
//            CLDEBUG("biz: " << biz);// 注意,设置需要执行的代码中有中文,需要设置 utf-8 的字符编码格式的 lua 代码段 .toUtf8(),不然后面获取lua  返回的变量中的中文是 ‘?’luaL_dostring(L, biz.toUtf8().data());//写入施工数量lua_pushnumber(L, count);lua_setglobal(L, "Quantity");/*//设置全局变量,接收Lua 返回的结果lua_pushnumber(L, 0);lua_setglobal(L, "MMaterPay");lua_pushnumber(L, 0);lua_setglobal(L, "SMaterPay");lua_pushstring(L, "无");lua_setglobal(L, "MMater");lua_pushstring(L, "无");lua_setglobal(L, "SMater");lua_pushnumber(L, 0);lua_setglobal(L, "ServicePay");lua_pushstring(L, "无");lua_setglobal(L, "ServiceInfo");*//*the function name*/lua_getglobal(L, "execution");lua_pushnumber(L, count);lua_call(L,1,0);//sum = (int)lua_tonumber(L,-1);//读取 lua 返回的信息lua_getglobal(L,"MMaterPay");QString MMaterPay = lua_tostring(L, -1);lua_getglobal(L,"SMaterPay");QString SMaterPay = lua_tostring(L, -1);lua_getglobal(L,"MMater");QString MMater = lua_tostring(L, -1);lua_getglobal(L,"SMater");QString SMater = lua_tostring(L, -1);lua_getglobal(L,"ServicePay");QString ServicePay = lua_tostring(L, -1);lua_getglobal(L,"ServiceInfo");QString ServiceInfo = lua_tostring(L, -1);//QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));/*cleanup the return*///lua_pop(L,1);/*cleanup Lua*/lua_close(L);CLDEBUG("MMaterPay: " << MMaterPay);CLDEBUG("SMaterPay: " << SMaterPay);CLDEBUG("MMater: " << MMater);CLDEBUG("SMater: " << SMater);CLDEBUG("ServicePay: " << ServicePay);CLDEBUG("ServiceInfo: " << ServiceInfo);

lua 代码段

//全局变量,保存 lua 的计算结果,lua 执行完后,c++可从栈中获取这些变量的值
MMaterPay=""
MMater=""
SMaterPay=""
SMater=""
ServicePay=""
ServiceInfo=""function execution(quantity)print(quantity)MMaterPay=string.format("%.2f", quantity*100*5)MMater="红砖100*5"SMaterPay = string.format("%.2f", quantity*2*30)SMater = "水泥2*30"ServicePay = string.format("%.2f", quantity*2)ServiceInfo = "服务"..math.floor(quantity/30+1).."次,监理"..math.floor(quantity/15+1).."次"print(MMaterPay)print(MMater)print(SMaterPay)print(SMater)print(ServicePay)print(ServiceInfo)
end

C++、Qt 调用 lua 完成简单计算并得到结果( 出现中文 ‘?’问题)相关推荐

  1. Qt用QProcess调用exe的简单方法

    Qt调用exe的简单方法: 1.找到exe的路径(注意,路径最好全是英文,无空格) 2.调用此exe 简单启动: QProcess pro; 1.带参数(参数具体意义请百度) pro.startDet ...

  2. Qt 调用MATLAB引擎混合编程

    0.前言 C/C++调用MATLAB有三个方式:调用dll文件.调用exe可执行程序和调用Engin引擎. 第一种方式利用MATLAB Coder 将MATLAB代码生成C/C++代码和相关动态链接库 ...

  3. lua qt 编译_Win32下 Qt与Lua交互使用(一):配置Qt下Lua运行环境

    偶然间看到Lua这种脚本语言,有点兴趣,简单学习了一下.html 发现Lua与C++之间能够实现很是强的交互性.Lua中能够使用C++中的函数,C++中也能够使用Lua中的函数.由此能够引起出不少奇思 ...

  4. Qt TCP协议 传输简单字符串实例

    TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序. A 转载:http://mobile.51cto.com ...

  5. Java调用Lua(转)

    Java 调用 Lua app发版成本高,覆盖速度慢,覆盖率页低.一些策略上的东西如果能够从服务端控制会方便一些. 所以考虑使用Lua这种嵌入式语言作为策略实现,Java则是宿主语言. 总体上看是一个 ...

  6. Qt调用MATLAB

    Qt调用MATLAB 生成的dll经验分享 由于项目需要将生成的数据转成C3D运动捕捉格式,目前无C++转换算法,有MATLAB算法,考虑到C++重新码算法的时间,选择了将MATLAB算法直接转成C+ ...

  7. LUA GC 简单测试

    LUA GC 简单测试 function table.count(t)if type(t) ~= "table" thenassert(false)returnendlocal n ...

  8. Qt 调用Python引擎混合编程

    0.前言 使用Qt和Python做混合编程,充分发挥Qt GUI的图形化框架优势和Python数据处理的计算能力.复杂的计算可用到Python众多三方库,将Python需要执行的功能写成py文件,做成 ...

  9. lua运行外部程序_二、C++调用Lua函数

    上一篇文章中我们已经把测试环境搭建完毕了,接下来就用上次的项目工程进行代码测试和分析. 这篇文章主要讲在C++中怎么调用Lua中的函数add,并且把lua中函数计算结果返回给C++,然后在打印出来计算 ...

最新文章

  1. .Net SqlDbHelper
  2. free() invalid next size异常
  3. Chrome的一点小问题
  4. python文件之间的相互调用_用Python创建功能模块——截取字符串模块
  5. Android—Navigation的使用
  6. Yii2系列教程三:Database And Gii
  7. UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  8. 【转】解密Qt安装目录的结构
  9. 运行java是提示 选择未包含 main 类型 如何解决_RuoYi 若依 代码生成器使用教程...
  10. 随机模拟的基本思想和常用采样方法(sampling)
  11. java比c,Java比C ++更好
  12. 基于struts2、spring的应用闲置一段时间后报空指针错(转)
  13. 调幅广播系统建模与仿真
  14. 数值分析(11):常微分方程的数值解法之Euler法
  15. 【转贴】忽悠:如何让武器战士买屠龙
  16. 在VR里弹空气吉他?开发者:手势优化有技巧
  17. python中dic的操作
  18. linux mysql 登录报1045_【mysql】linux登录MySQL_报错ERROR_1045_(28000)解决办法
  19. 小白入门---HTML5音乐播放器
  20. PHPJavaJavascript通用RSA加密

热门文章

  1. 如何看待何恺明最新一作论文Masked Autoencoders?
  2. GDR(Gradual Decoding Refresh, GradualDecoder Refresh)
  3. 企业自动化运维ansible
  4. MQ的几个常见面试问题
  5. Oracle数据库学习(六):where条件查询及关键字使用
  6. html5 多点触控 缩放,WebBrowser禁用触摸缩放
  7. 如把联想电脑计算机图标放在桌面上,联想的电脑应用怎么放到桌面图标-?(图)...
  8. llqrcode.js识别二维码,解析二维码信息
  9. Java 不允许在一个范围大的作用域下重新定义同名变量
  10. 计算机网络——物理层2