我正在尝试做一些非常简单的事情,我只想在Windows控制台中打印我的母语pt-br。
IDE Creator 我在main.cpp文件中创建了一个新项目> other-> Qt控制台应用程序:
#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的System编码是对的吗?
我错过了什么?
答案 0 :(得分:1)
我对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编解码器。
答案 1 :(得分:1)
我在这个帖子中找到了解决方案。 Output unicode strings in Windows console app
如果我在运行应用程序之前在Windows控制台中运行chcp 65001
,则会正确打印字符。
我不知道如何在我的源代码中解决它,然后我用start cpp函数手动调用该程序。
答案 2 :(得分:0)
这是我写的函数的返回行,它将密码显示为●●●●●
return QString::fromUtf8( "\u25CF \u25CF \u25CF \u25CF \u25CF" );
QString :: fromUnicode应该可以正常工作。
可能是这样的:
QString x = QString::fromUtf8( "\u25CF \u25CF \u25CF \u25CF \u25CF" );
std::cout << qPrintable(x) << std::endl;
当然把它改成QString :: fromUnicode ...希望这有帮助
答案 3 :(得分:-1)
QString a="aeiou áéíóú";
std::cout<< a.toStdString().data();