首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MFC CreateProcess不传递UTF8命令行arg来处理

MFC CreateProcess不传递UTF8命令行arg来处理
EN

Stack Overflow用户
提问于 2012-02-02 11:43:31
回答 3查看 1.2K关注 0票数 1

我尝试使用CreateProcess从MFC应用程序启动控制台应用程序。

CString变量包含应用程序名和命令行arg,该命令行是中文UTF8文件名。

文件名不以UTF8格式传递,应用程序失败。

我怎样才能以正确的方式发送命令?

代码语言:javascript
运行
复制
BOOL bRetVal = ::CreateProcess( NULL,             
        cmd.GetBuffer(m_strProg.GetLength()),                 // Command line. 
        NULL,             // Process handle not inheritable. 
        NULL,             // Thread handle not inheritable. 
        FALSE,            // Set handle inheritance to FALSE. 
        0,                // No creation flags. 
        NULL,             // Use parent's environment block. 
        NULL,             // Use parent's starting directory. 
        &si,              // Pointer to STARTUPINFO structure.
        &pi               // Pointer to PROCESS_INFORMATION structure.
        );
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-02 13:50:59

假设您正在以多字节模式编译(而不是unicode)。

代码语言:javascript
运行
复制
CT2W path(m_strProg);
CreateProcessW(path, ...);
票数 1
EN

Stack Overflow用户

发布于 2012-02-02 15:52:23

根据编译器设置的不同,您将调用CreateProcessA (在当前代码页中使用char字符串),或者调用在Unicode 16中使用wchar_t字符串的CreateProcessW。这两种方法都不能将UTF-8字符串作为输入处理.

您应该将UTF-8字符串转换为UTF-16,然后从该字符串构建命令行。

票数 2
EN

Stack Overflow用户

发布于 2012-02-02 11:52:16

只是说你有两个否定句,在英语中,这使它成为一个积极的-所以你是说,事实上,通过UTF8。无论如何,您还需要阅读http://www.joelonsoftware.com/articles/Unicode.html,您需要更改您的区域设置和代码页,类似于Unicode characters in Windows command line - how?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9111743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档