我在 Windows 7 64 位上有 Microsoft Visual Studio 2010。(在项目属性中“字符集”设置为“未设置”,但是每个设置都会导致相同的输出。)
源代码:
using namespace std;
char const charTest[] = "árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP\n";
cout << charTest;
printf(charTest);
if(set_codepage()) // SetConsoleOutputCP(CP_UTF8); // *1
cerr << "DEBUG: set_codepage(): OK" << endl;
else
cerr << "DEBUG: set_codepage(): FAIL" << endl;
cout << charTest;
printf(charTest);
*1:包括windows.h
混乱的东西,所以我从一个单独的 cpp 中包含它。
编译后的二进制文件包含作为正确 UTF-8 字节序列的字符串。chcp 65001
如果我使用和 issue将控制台设置为 UTF-8 type main.cpp
,则字符串显示正确。
测试(控制台设置为使用 Lucida Console 字体):
D:\dev\user\geometry\Debug>chcp
Active code page: 852
D:\dev\user\geometry\Debug>listProcessing.exe
├írv├şzt┼▒r┼Ĺ t├╝k├Ârf├║r├│g├ęp ├üRV├ŹZT┼░R┼É T├ťK├ľRF├ÜR├ôG├ëP
├írv├şzt┼▒r┼Ĺ t├╝k├Ârf├║r├│g├ęp ├üRV├ŹZT┼░R┼É T├ťK├ľRF├ÜR├ôG├ëP
DEBUG: set_codepage(): OK
��rv��zt��r�� t��k��rf��r��g��p ��RV��ZT��R�� T��K��RF��R��G��P
árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP
这背后的解释是什么?我可以以某种方式要求cout
工作printf
吗?
附件
许多人说 Windows 控制台根本不支持 UTF-8 字符。我是匈牙利的匈牙利人,我的 Windows 设置为英语(日期格式除外,它们设置为匈牙利语),西里尔字母仍然与匈牙利字母一起正确显示:
(我的默认控制台代码页是 CP852)