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 всё равно кракозябры
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 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
    Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы