Как напечатать символы Юникода, используя Qt? - PullRequest
0 голосов
/ 10 февраля 2012

Я пытаюсь сделать что-то очень простое, я просто хочу напечатать свой родной язык, pt-br в консоли Windows.

IDE Creator Я создал новый проект-> other-> Qt Console Application и поместил его в свой файл 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, верно?

что мне не хватает?

Ответы [ 4 ]

1 голос
/ 13 февраля 2012

Я нахожу решение в этой теме. Выводить строки юникода в консольном приложении Windows

Если я запустил chcp 65001 в консоли Windows до запуска приложения, символы будут напечатаны правильно.

Я не знаюкак обойти это в моем исходном коде, затем я вызываю эту программу вручную с помощью функции start cpp.

1 голос
/ 11 февраля 2012

Я не так хорошо знаком с 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.

0 голосов
/ 31 мая 2014
QString a="aeiou áéíóú";
std::cout<< a.toStdString().data();
0 голосов
/ 11 февраля 2012

Вот строка обратной функции, которую я написал, которая отображает пароли как ● ● ● ● ●

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 ... надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...