Задать вопрос
Profi_GMan
@Profi_GMan

Как перевести qbaytearray cp1251 в QString?

Доброго времени суток!
Как можно перевести QByteArray с кодировкой cp1251 в QString(т.е. в юникод)?
Замучался уже искать. Пробовал вот так:
QTextCodec *codec = QTextCodec::codecForName("CP1251");
        QString str = codec->toUnicode(proc.readAll()); //proc.readAll() возвращает QByteArray
            qDebug().noquote()<< str;

И так:
QString convert(char *str, char *from, char *to)
{
QTextCodec* codec = QTextCodec::codecForName(from);
if (!codec) return NULL;
QString unicodeString = codec->toUnicode( str);

if (strcmp(from,to))
{
codec = QTextCodec::codecForName(to);
if (!codec) return NULL;

return codec->fromUnicode(unicodeString);
}

return unicodeString;
}

И ещё много как, но всё равно на выходе кракозябры...
Как быть?
Заранее ОГРОМНОЕ спасибо!
upd Если сделать вот так:
QTextCodec *codec = QTextCodec::codecForName("CP866");
            _output = codec->toUnicode(proc.readAll());
            qDebug()<<_output;

то при выводе в qmessagebox(или в другой виджет) - всё работает, но в консоли qt creator всё равно кракозябры
  • Вопрос задан
  • 1866 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
Profi_GMan
@Profi_GMan Автор вопроса
Если сделать вот так:
QTextCodec *codec = QTextCodec::codecForName("CP866");
            _output = codec->toUnicode(proc.readAll());
            qDebug()<<_output;

то при выводе в qmessagebox(или в другой виджет) и в файл - всё работает, но в консоли qt creator всё равно кракозябры, но это не столь важно
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
PavelK
@PavelK
#include <QCoreApplication>

#include <QFile>
#include <QDebug>
#include <QTextCodec>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("testfile.txt");
    file.open(QIODevice::ReadOnly | QIODevice::Text);

    QByteArray data = file.readAll();

    QTextCodec *codec = QTextCodec::codecForName("Windows-1251");

    QString str = codec->toUnicode(data);
    qDebug()<<data<<str;

    return a.exec();
}


Если не работает, то тут либо исходный текст не в Windows-1251 (Например в KOI8-R), либо то, куда выводите, не поддерживает юникод или что-то не то со шрифтом.
P.S. Я думал в 21 веке проблемы кодировки уже решены :DD
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы