我正在尝试做一些非常简单的事情,我只想在 Windows 控制台中打印我的母语 pt-br。
IDE 创造者 我创建了一个新项目->other->Qt 控制台应用程序,我把它放在我的 main.cpp 文件中:
#include <QCoreApplication>
#include <QDebug>
#include <QTextCodec>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "aeiou áéíóú";
std::cout << "aeiou áéíóú" << endl;
return 0;
}
这是我得到的:
C:\Users\maiko.costa\testeQtConsole\debug>testeQtConsole.exe
aeiou ßÚݾ·
aeiou ßÚݾ·
C:\Users\maiko.costa\testeQtConsole\debug>
我也试过了,但是之前的输出是一样的:
#include <QCoreApplication>
#include <QDebug>
#include <QTextCodec>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextCodec *codec = QTextCodec::codecForName("CP1252");
QTextCodec::setCodecForCStrings(codec);
qDebug() << "aeiou áéíóú";
std::cout << "aeiou áéíóú" << endl;
return 0;
}
Windows 7 的系统编码是否正确?
我错过了什么?
最佳答案
我对 QT 不是很熟悉,但我认为这对您也有帮助。 Windows 控制台使用 OEM 字符集。因此,为了在 std::cout 上正确打印字符,需要使用 OEM 对其进行编码。这可以使用 Windows API CharToOem 来完成。
小例子,让你明白(这里输入假设是UTF16):
void oemPrint(const wchar_t* str) {
char* chars = (char*)alloca(strlen(str)+1);
CharToOemW(str, chars);
fputs(chars, stdout);
}
// Usage:
oemPrint(L"aeiou áéíóú");
编辑:QT 解决方案可能是使用 QTextCodec::codecForName("IBM 850") - 这是 OEM 编解码器。
关于c++ - 如何使用 Qt 打印 unicode 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9230610/