gpt4 book ai didi

c++ - wprintf 不打印特殊字符

转载 作者:太空狗 更新时间:2023-10-29 20:59:13 25 4
gpt4 key购买 nike

我正在尝试使用以下代码打印用于执行程序的参数:

#include "stdafx.h"
#include<stdio.h>
#include<locale>

int main(int argc, wchar_t* argv[])
{
std::locale::global(std::locale(""));
wprintf(L"Parameter sent: %s", argv[1]);
return 0;
}

但是,如果我使用下面的命令来执行程序:

AppName.exe SomeText-éãö

它打印:

Parameter sent: ?????????????

最佳答案

根据 Microsoft , 如果使用 main 则默认创建多字节字符环境。如果使用 wmain,则默认创建宽字符环境。

因此,事实证明有两种方法可以解决这个问题。我将以汉字为例,在项目的属性页调试选项卡中将命令参数设置为“中国”(意思是“中国”) em>.

基本上,除了语言环境之外,您还需要设置控制台输入和输出使用的代码页。否则,控制台可能无法正确显示您的字符。这就是您看到“??????..”的原因,因为控制台当前使用的代码页中不存在这些字符。

1.使用多字节字符集。

// Since we use MBCS, narrow-character version main should be used
int main(int argc, char *argv[])
{
// You console may not use the code page you want.
printf ("%d\n", GetConsoleCP());
printf ("%d\n", GetConsoleOutputCP());

// To read/write Chinese characters, we set code page to 936.
SetConsoleCP(936);
SetConsoleOutputCP(936);

// Set C++ locale. Same to "Chinese_China.936" here.
locale old = locale::global(locale(""));
locale cur;
printf ("old locale: %s\n", old.c_str());
printf ("new locale: %s\n", cur.c_str());

printf("Parameter sent: %s\n", argv[1]);
getchar();
}

哪些输出,

1252
1252
old locale: C
new locale: Chinese (Simplified)_People's Republic of China.936
Parameter sent: 中国

2.使用Unicode。

// Since we use Unicode, wide-character version wmain should be used
int wmain(int argc, wchar_t* argv[])
{
// You console may not use the code page you want.
printf ("%d\n", GetConsoleCP());
printf ("%d\n", GetConsoleOutputCP());

// To read/write Chinese characters, we set code page to 936.
SetConsoleCP(936);
SetConsoleOutputCP(936);

// Set C++ locale. Same to "Chinese_China.936" here.
locale old = locale::global(locale(""));
locale cur;
printf ("old locale: %s\n", old.c_str());
printf ("new locale: %s\n", cur.c_str());

wprintf(L"Parameter sent: %ls\n", argv[1]);
return 0;
}

哪些输出,

1252
1252
old locale: C
new locale: Chinese (Simplified)_People's Republic of China.936
Parameter sent: 中国

关于c++ - wprintf 不打印特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25150282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com