使用"std::cout"打印特殊(扩展)ASCII 字符时在输出中获取"?"



我想在控制台中打印扩展的ascii字符,我尝试过这个:

std::cout << "╔══════════╦════════════════════════════════════════════════════════╗n";
std::cout << "║  ID:678  ║  Name: ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓        ║n";
std::cout << "║          ║  Surname: ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓     ║n";
std::cout << "║          ║  Gender: ▓▓▓▓▓▓                                        ║n";
std::cout << "║          ║  Age: ▓▓▓                                              ║n";
std::cout << "║          ║  Tel: ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓                  ║n";
std::cout << "║          ║  Adress: ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓     ║n";
std::cout << "║          ║  ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓     ║n";
std::cout << "║ ID Print ║  Hobbies: ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓     ║n";
std::cout << "║          ║  ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓     ║n";
std::cout << "║  ░░░░░░  ║  Additional İnformations: ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓     ║n";
std::cout << "║  ▒▓▓▓▓▒  ║  ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓     ║n";
std::cout << "║  ▓▓▓▓▓▓  ║  ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓     ║n";
std::cout << "╚══════════╩════════════════════════════════════════════════════════╝n";

但是输出是这样的:

?????????????????????????????????????????????????????????????????????
?  ID:678  ?  Name: ????????????????????????????????????????        ?
?          ?  Surname: ????????????????????????????????????????     ?
?          ?  Gender: ??????                                        ?
?          ?  Age: ???                                              ?
?          ?  Tel: ???????????????????????????????                  ?
?          ?  Adress: ?????????????????????????????????????????     ?
?          ?  ?????????????????????????????????????????????????     ?
? ID Print ?  Hobbies: ????????????????????????????????????????     ?
?          ?  ?????????????????????????????????????????????????     ?
?  ??????  ?  Additional ¦nformations: ????????????????????????     ?
?  ??????  ?  ?????????????????????????????????????????????????     ?
?  ??????  ?  ?????????????????????????????????????????????????     ?
?????????????????????????????????????????????????????????????????????

但当我尝试这个:std::cout << char(200);时,它成功地打印了'╔'性格所以我确信Console支持扩展的ascii字符。

所以;如何正确输出这些cout?

编辑:使用std::wcout << L"";不起作用。

第2版:程序只能在Windows7或更高版本中运行。

第3版:

使用此代码打印卡片,

#include <fcntl.h>
#include <io.h>
_setmode(_fileno(stdout), _O_U16TEXT);

但是,我不能打印任何正常的cout字符,这会出错。(错误字符串示例:std::cout << "Hello!"(

对于在windows上写作的人,可以应用以下内容:source(_setmode windows source(

所需库:

#include <fcntl.h>
#include <io.h>

将cout转换为Unicode:

_setmode(_fileno(stdout), _O_U16TEXT);

*重要提示:在这种风格中,您应该始终使用std::wcout<lt;L";为此。如果您的代码在其他行中包含std::cout,那么下面是解决方案:

在不需要特殊字符打印时,使用_setmode(_fileno(stdout), _O_TEXT);将stdout设置回默认文本样式。

最新更新