【发布时间】:2022-01-01 20:40:49
【问题描述】:
这是我尝试的方式:
#include <stdio.h>
#include <windows.h>
using namespace std;
int main() {
SetConsoleOutputCP(CP_UTF8);
//german chars won't appear
char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
wchar_t *unicode_text = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
wprintf(L"%s", unicode_text);
}
而且效果是只显示 us ascii 字符。没有显示错误。源文件采用utf8编码。
那么,我在这里做错了什么?
到WouterH:
int main() {
SetConsoleOutputCP(CP_UTF8);
const wchar_t *unicode_text = L"aäbcdefghijklmnoöpqrsßtuüvwxyz";
wprintf(L"%s", unicode_text);
}
- 这也不起作用。效果是一样的。我的字体当然是 Lucida Console。
第三次拍摄:
#include <stdio.h>
#define _WIN32_WINNT 0x05010300
#include <windows.h>
#define _O_U16TEXT 0x20000
#include <fcntl.h>
using namespace std;
int main() {
_setmode(_fileno(stdout), _O_U16TEXT);
const wchar_t *u_text = L"aäbcdefghijklmnoöpqrsßtuüvwxyz";
wprintf(L"%s", u_text);
}
好的,有些东西开始起作用了,但输出是:ańbcdefghijklmno÷pqrs▀tuŘvwxyz。
【问题讨论】:
-
this question 可能重复。
-
哪个编译器?你可能想检查
strlen(text);我预计不是 30 岁。
标签: c++ utf-8 console mingw windows-xp-sp3