如何使用Qt打印unicode字符?

发布于 2025-01-04 00:51:37 字数 1148 浏览 0 评论 0原文

我想做一些非常简单的事情,我只想在 Windows 控制台中打印我的母语 pt-br 。

IDE创建器 我创建了一个新项目->其他->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是吧?

我缺少什么?

I'm trying to do something very simple, I just want to print my native language, pt-br in Windows Console.

IDE Creator
I created a new project->other->Qt Console Application the I put it in my main.cpp file:

#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;
}

here is what I got:

C:\Users\maiko.costa\testeQtConsole\debug>testeQtConsole.exe
aeiou ßÚݾ·
aeiou ßÚݾ·

C:\Users\maiko.costa\testeQtConsole\debug>

I've tried it too, but with the same previous output:

#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;
}

The System encode for Windows 7 is it right ?

what am I missing ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

勿挽旧人 2025-01-11 00:51:37

我对 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 编解码器。

I am not that familiar with QT but I think this can help you just as well. The Windows console uses the OEM char set. Therefore, in order to properly print characters on std::cout they need to be encoded using OEM. This can be accomplished using the Windows API CharToOem.

Small example, just so you get the idea (here input is assumed to be UTF16):

void oemPrint(const wchar_t* str) {
    char* chars = (char*)alloca(strlen(str)+1);
    CharToOemW(str, chars);
    fputs(chars, stdout);
}

// Usage:
oemPrint(L"aeiou áéíóú");

EDIT: A QT solution might be to use QTextCodec::codecForName("IBM 850") - this is the OEM codec.

旧情别恋 2025-01-11 00:51:37

我在这个线程中找到了解决方案。 在 Windows 控制台应用程序中输出 unicode 字符串

如果我运行 chcp在我运行应用程序之前,Windows 控制台中的 65001 字符打印正确。

我不知道如何在源代码中解决它,然后我使用 start cpp 函数手动调用该程序。

I find the solution in this thread. Output unicode strings in Windows console app

If I ran chcp 65001 in windows console before I ran my app the characters are printed correctly.

I don't know how to workaround it in my source code, then I call this program manually with the start cpp function.

他不在意 2025-01-11 00:51:37

这是我编写的函数的返回行,该函数将密码显示为 ● ● ● ● ●

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...希望这有帮助

Here is the return line of function I wrote that displays passwords as ● ● ● ● ●

return QString::fromUtf8( "\u25CF \u25CF \u25CF \u25CF \u25CF" );

QString::fromUnicode should work the same.

Maybe something like:

QString x = QString::fromUtf8( "\u25CF \u25CF \u25CF \u25CF \u25CF" );
std::cout << qPrintable(x) << std::endl;

Of course change it to QString::fromUnicode... hope this helps

落在眉间の轻吻 2025-01-11 00:51:37
QString a="aeiou áéíóú";
std::cout<< a.toStdString().data();
QString a="aeiou áéíóú";
std::cout<< a.toStdString().data();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文