如何使用Qt打印unicode字符?
我想做一些非常简单的事情,我只想在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我对 QT 不太熟悉,但我认为这也可以帮助你。 Windows 控制台使用 OEM 字符集。因此,为了在 std::cout 上正确打印字符,需要使用 OEM 对其进行编码。这可以使用 Windows API CharToOem 来完成。
小例子,只是为了让您明白这个想法(这里假设输入为 UTF16):
编辑: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):
EDIT: A QT solution might be to use QTextCodec::codecForName("IBM 850") - this is the OEM codec.
我在这个线程中找到了解决方案。 在 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.
这是我编写的函数的返回行,该函数将密码显示为 ● ● ● ● ●
QString::fromUnicode 应该工作相同。
也许是这样的:
当然将其更改为 QString::fromUnicode...希望这有帮助
Here is the return line of function I wrote that displays passwords as ● ● ● ● ●
QString::fromUnicode should work the same.
Maybe something like:
Of course change it to QString::fromUnicode... hope this helps