如何使用Qt打印unicode字符?

时间:2012-02-10 15:54:34

标签: c++ qt unicode

我正在尝试做一些非常简单的事情,我只想在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编码是对的吗?

我错过了什么?

4 个答案:

答案 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();