如题,关于qt执行带有中文参数的DOS命令执行不成功

我有一个梦想,我写的代码,可以像诗一样优美。我有一个梦想,我做的设计,能恰到好处,既不过度,也无不足。

项目中第一款软件交付遇到一个小细节,作为开发,我们一般都默认避免中文路径,但是客户不一样,他们的习惯是中文!中文!还TMD是中文!
环境:qt5.9 + MSVC2015_64

数据库中有个数据表,每次初始化数据库的时候用到,跟用户说明了不要放在中文路径下,但是作为甲方,怎么能听你的,他连你的软件使用手册都不看的好吗!
必须放在中文路径下,虽然我不会手动用到它,但它必须得在中文目录下!
阿西吧!本着用户是上帝的原则,开始了一波改动。

先从中文路径说起,在不进行其他文件格式的变动的情况下(比如将文件由utf8转成asicll之类的情况下),由QFileDialog获取的路径是正常的,但是如果手动构造一个字符串 D:/360安全浏览器下载/source/TESTDATA.sql,就会出现如下情况

从输出来看(调试的窗口就懒得截图了),可以看的出来中文字符应该是解析了的,但是最后一个字符“载”解析出错,查阅无果,试了下在不使用MSVC的情况下,只使用MINGW32,就不会出现这个问题,说明问题还是在MSVC的身上。
之前查到一篇博客说,VS把文件格式还是字符集什么东东改成了utf8不带bom头的啥玩意(原谅我忘了,这个东西了解下就好),造成了和qt不一致的原因,行,那就不要手动构造了。

用QFileDialog获取的带有中文路径的字符串,转成char*

附注:import_file为带有中文路径的字符串。
执行发现,并没有成功。
写个demo 重新试一遍(一定要把它弄清!)

 QString strCMd = "mysql -uroot -p10220 -h127.0.0.1 testta415 < D:\\360安全浏览器下载\\source\\testdata.sql";////// \brief strstd::string cmd = strCMd.toStdString();const char* ccmd = cmd.c_str();

为了方便我直接手动构造了可以识别的中文字符串

调试发现:

转换成的char* ccmd字符串是正确的的,但是调用systerm()就不成功。
在查看std::string的结构的时候,突然想起来还有个std::wstring!
我去,这上学那会儿用到的,这两年还真没用到过几次宽字节,虽然还没有试,但是直觉告诉我,就是他了,问题就在这里。

#include <Windows.h>
char * wchar2char(const wchar_t* wchar )
{char * m_char;int len= WideCharToMultiByte( CP_ACP ,0,wchar ,wcslen( wchar ), NULL,0, NULL ,NULL );m_char= new char[len+1];WideCharToMultiByte( CP_ACP ,0,wchar ,wcslen( wchar ),m_char,len, NULL ,NULL );m_char[len]= '\0';return m_char;
}

上述代码为宽字节转为char*。

  QString strCMd = "mysql -uroot -p10220 -h127.0.0.1 testta415 < D:\\360安全浏览器下载\\source\\testdata.sql";////// \brief strstd::string cmd = strCMd.toStdString();const char* ccmd = cmd.c_str();//为了对比的没有删除std::wstring strtest = strCMd.toStdWString();const wchar_t * str = strtest.c_str();const char* pstr = wchar2char(str);system(pstr);

本着求真的心态,再次调试,会发现不一样的东西

在转化为wstring和wchar的时候,字符都是正常的,当转到char的时候,又会成为乱码,不用担心,如果没有变化,那才要担心,有改变说明才说明可能有戏。
接着执行下去!
成功了!
记录一下,免得以后忘掉,也给别的遇到这个问题的小伙伴提个醒。

写在最后,C++之路长漫漫,你我当薪火相传。

关于qt执行带有中文参数的DOS命令执行不成功相关推荐

  1. 【Ubuntu16.04】解决Qt安装包(.run文件)不能用./命令执行的问题

    [Ubuntu16.04]解决Qt安装包(.run文件)不能用./命令执行的问题 参考文章: (1)[Ubuntu16.04]解决Qt安装包(.run文件)不能用./命令执行的问题 (2)https: ...

  2. Hack The Box - Meta 利用Exiftool远程代码执行漏洞获取webshell,ImageMagrick命令执行漏洞横向提权,更改环境配置SUDO纵向提权

    Hack The Box - Meta Hack The Box开始使用流程看这篇 文章目录 Hack The Box - Meta 整体思路 1.Nmap扫描 2.Exiftool远程代码执行漏洞( ...

  3. PHP exec xargs 不执行,关于 ‘--exec’ 参数( find 命令)及介绍 ‘xargs ’命令区别(新版)...

    ###前言: find 命令一直都是系统管理员的常用命令之一, 其参数中 "-exec" 尤其实用.而 "xargs" 命令,针对查询也有属于自己的见解.本文着 ...

  4. 在C#里,如何执行cmd里的常用dos命令 (转)

    http://blogger.org.cn/blog/more.asp?name=nrzj&id=4280 using System; using System.Diagnostics; na ...

  5. runtime无法执行grep_让你的 Shell 命令执行可视化和告警

    Sampler是一个用于shell命令执行,可视化和告警的工具.其配置使用的是一个简单的YAML文件. 1.为什么我需要它? 你可以直接从终端对任意动态进程进行采样 – 观察数据库中的更改,监控MQ动 ...

  6. 【漏洞学习——命令执行】中国民生银行某站命令执行漏洞Getshell

    漏洞细节 http://58.68.130.68/wis18/customerjsp/msyh/login/login.jsp 命令执行漏洞 shell http://58.68.130.68/wis ...

  7. linux如何执行python文件_以linux命令执行Python文件 - python

    Closed. This question needs to be more focused.它当前不接受答案. 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题 ...

  8. oracle执行带有nbsp参数,Oracleamp;nbsp;参数文件amp;nbsp;spfileamp;nbsp;a

    一.pfile spfile区别 Pfile 文本,可以被vi编辑 viinitsid.ora Spfile 二进制 只能放在Oracle服务器端 spfilesid.ora Spfile 可以被rm ...

  9. execjs执行包含中文参数的JavaScript

    抓取到了一段包含数据的JavaScript代码: import re import requestsheaders = {"user-agent": "Mozilla/5 ...

最新文章

  1. xcode7 没有Empty Application
  2. Scala 数组详解
  3. PHP获取文件的绝对路径
  4. 开始体验Kali Linux
  5. 一、WPF 2个datagrid之间同步进度条
  6. Linux fork的写时复制
  7. Java集合框架使用总结
  8. 【二分图匹配】E. 过山车
  9. mysql字段里面有16字节特殊字符替换
  10. 罗马盘,大力盘,大圣盘等网盘资源搜索免费下载资源教程
  11. linux下wav转换为mp3
  12. rba有哪几個主要組成部分_RBA管理体系有哪些
  13. background_dump_dest 参数
  14. aptx与ldac音质区别_ldac_aptx和aptx hd功能介绍及区别介绍
  15. 通过Python爬虫按关键词抓取相关的新闻
  16. SQL查询重复记录 sql 查重
  17. H3C交换机配置DHCP
  18. python 长整型_Python变量类型(l整型,长整形,浮点型,复数,列表,元组,字典)学习...
  19. 哪里能免费下载动态PPT模板?高端精美动态PPT模板大全免费
  20. Matlab:plot函数绘制二维折线图

热门文章

  1. 第四范式下的科教研:算力困局怎么解?
  2. PCIe资料分享-快速入门
  3. C++大数加法-----OvO
  4. 双目立体视觉(4)- ZED2双目视觉开发理论与实践 with examples 0.1 object detection
  5. 苹果手机自带左划关闭功能使用方法
  6. 也来聊聊滑块验证码的那些事
  7. 深入理解Promise并写一个符合Promise a+规范的Promise代码
  8. 重磅!阿里 9000 万欧元收购 Flink 母公司 Data Artisans
  9. Vivado逻辑分析仪使用教程
  10. ptrace源代码分析