argv[]
中的参数是 UTF-8 编码的。我想做类似的事情:
#include <wstring>
#include <???>
void doWhatever(wstring &ws);
using ???;
int main(int argc, char *argv[])
{
while (--argc)
{
// Convert argv to wstring
wstring ws = ???(argv[argc]);
doWhatever(ws);
}
return EXIT_SUCCESS;
}
???
我不知道。我敢肯定这对于 C++ 用户来说是微不足道的,但搜索它只会带来很多噪音。
最佳答案
这是一个很好的问题! :-)
正如 Maxim 所写:mbstowcs()
带有“%S”(大写“S”)的 wsprintf()。在 wsprintf() 中,“S”表示多字节字符串(在 sprintf() 中,“S”表示宽字符)。
您可以使用 std::wstring_convert 并选择 UTF-8 编码。我认为它是“codecvt_utf8_utf16”
对于窗口:
WINAPI 中的 MultiByteToWideChar()
如果您使用 SetClipboardData() 将 ASCII 文本设置为剪贴板,Windows 允许您使用 CF_UNICODETEXT 的 GetClipboardData() 为您进行转换!
您也可以通过在 2 个 ASCII 字符之间添加“NULL”来手动执行此操作(并且仅在某些情况下有效)。
现在想到的就是这些:-)
关于C++:将 char * 转换为 wstring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24166841/