Not*_*ist 8 c++ utf-8 visual-studio
我在Windows 7 64bit上安装了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);
Run Code Online (Sandbox Code Playgroud)
*1:包括windows.h弄乱东西,所以我从一个单独的cpp中包含它.
已编译的二进制文件包含字符串作为正确的UTF-8字节序列.如果我将控制台设置为带有chcp 65001和发出的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
Run Code Online (Sandbox Code Playgroud)
这背后的解释是什么?我可以以某种方式要求cout工作printf吗?
附件
许多人说Windows控制台根本不支持UTF-8字符.我是匈牙利的匈牙利人,我的Windows设置为英语(日期格式除外,它们设置为匈牙利语),西里尔字母仍然与匈牙利字母一起正确显示:

(我的默认控制台代码页是CP852)
这里的区别在于 C++ 运行时和 C 库处理系统区域设置的方式。
要使用 std::cout 获得相同的结果,您可以尝试std::ios::imbue方法和std::locale
但这里描述了 utf-8 和 C++ 的主要问题
C++03 提供两种字符串文字。第一种包含在双引号内,生成 const char 类型的以 null 结尾的数组。第二种定义为 L"",生成 const wchar_t 类型的空终止数组,其中 wchar_t 是宽字符。这两种文字类型都不支持 UTF-8、UTF-16 或任何其他类型的 Unicode 编码的字符串文字。
所以无论如何,它都是特定于实现的,因此不可移植,因为标准 C++ 输出流无法理解 utf-8。
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |