use*_*334 5 windows unicode console
AllocConsole();\nconsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);\nWriteConsoleW(consoleHandle, L"qwe\xc4\x85\xc4\x99\xc4\x97\xc5\xa1\xc5\xb3\\n", 9, NULL, NULL);\n_wfreopen(L"CONOUT$", L"w", stdout);\nwprintf(L"qwe\xc4\x85\xc4\x99\xc4\x97\xc5\xa1\xc5\xb3\\n");\nRun Code Online (Sandbox Code Playgroud)\n\n输出是:
\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\nqwe\xc4\x85\xc4\x99\xc4\x97\xc5\xa1\xc5\xb3\nqwe\n
为什么 wprintf 在打印 qwe 后停止?\xc4\x85 中遇到的 \\0 字节应该终止宽字符字符串,据我所知
\n起初我接受了 Hans Passant 的回答,但 wprintf 不打印到 UTF-8 流的根本原因是 wprintf 的行为就像使用函数 wcrtomb,该函数将宽字符 (wchar_t) 编码为多字节序列,具体取决于当前区域设置链接。Windows 没有支持 UTF-8 的区域设置(支持 UTF-8 代码页 (65001) 的区域设置)。
引用自MSDN:
可用的区域设置名称、语言、国家/地区代码和代码页集包括 Windows NLS API 支持的所有内容,但每个字符需要两个以上字节的代码页(例如 UTF-7 和 UTF-8)除外。
| 归档时间: |
|
| 查看次数: |
7132 次 |
| 最近记录: |