2012-02-10 196 views
0

我想要做一些非常简单的事情,我只想在Windows控制台中打印我的母语pt-br。如何使用Qt打印Unicode字符?

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

系统编码FO Windows 7是否正确?

我错过了什么?

+0

也许看看[QLocale](http://www.trinitydesktop.org/docs/qt4/qlocale.html)? – AJG85 2012-02-10 15:58:38

+0

您是否尝试过转义字符串文字中的非ASCII字符? – pezcode 2012-02-10 18:15:59

+0

QLocale没有改变任何东西。 @pezcode你的意思是这样的:http://stackoverflow.com/questions/3211214/how-to-convert-a-unicode-string-to-its-unicode-escapes? – MaikoID 2012-02-13 12:24:48

回答

1

我对QT并不熟悉,但我认为这可以帮助您。 Windows控制台使用OEM字符集。因此,为了在std :: cout上正确地打印字符,他们需要使用OEM进行编码。这可以使用Windows API CharToOem完成。

小例子,只是让你的想法(在这里输入被假定为UTF-16):

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

+0

您还必须检查源代码编码和编译器的文档,以确保在编码输出之前正确解释字符串。 – 2012-02-10 22:22:07

+0

是的,这就是为什么我写道“这里的输入被认为是UTF16”。这只是一个例子。 – rasmus 2012-02-10 22:28:21

+0

Windows控制台是Unicode,控制台子系统将为您执行任何代码页转换。此外,如果您为控制台选择光栅字体,则代码页*仅适用*。 – Joey 2012-02-10 22:28:26

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

+0

你知道任何方式自动将我的字符串转换为转义字符串吗? – MaikoID 2012-02-13 13:21:16

1

,我觉得在这个线程解决方案。 Output unicode strings in Windows console app

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

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

-1
QString a="aeiou áéíóú"; 
std::cout<< a.toStdString().data();