c++ - 如何使用 Qt 打印 unicode 字符?

标签 c++ qt unicode

我正在尝试做一些非常简单的事情,我只想在 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/

相关文章:

c++ - sizeof 接受两个参数

c++ - 如何将 LPTSTR 转换为 LPCWSTR?

c++ - 为什么此代码在 Mac 和 Red Hat 中运行如此不同

在英语 Windows 中使用 UTF-8 数据的 Java 可更新结果集异常

javascript - 如何为 unicode 字母添加转换

c++ - 在 C++ 中将 Mutex 和 lock_guard 与 vector 一起使用

qt - 将外部 QML 模块路径添加到 QQmlApplicationEngine

c++ - 使用 Qt 检测和打印 Unicode 字符

python - 如何使用PyQt发送http请求?

scala - 如何将 IDEA 配置为自动将 => 替换为 ⇒ 和 -> 替换为 →?