Qt4工作笔记-Linux中Qt4.8.6在GBK和UTF-8编码转换

目录

 

 

基本概念

代码与实例


 

基本概念

背景是这样的。目前在本人开发的系统里面,有几个程序。

使用Qt管理(通过pro文件,生成Makefile,姑且称为Qt管理把)的后台进程,读取关系型数据库的数据后!

把数据写到Redis库中。

后端Spring Boot读取Redis的数据,进行显示。

其中遇到了一个问题。就是后端读取Redis数据库后,不管是转GBK还UTF-8,死活不对。

后来发现是这个关系型数据库不像MySQL那样,他很神奇。采用的是GBK编码(后面测出来的,之后看了官方论坛,才知道是GB18那个一堆数据的)。

这里就可以直接在那个Qt管理的程序中,把GBK编码转换为UTF-8编码。然后Qt4,很神奇,不像Qt5这么方便。

下面说明下Qt4编码转换的固定步骤!

 

 

代码与实例

第一步,在main.cpp中添加如下:

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

将应用程序的那些乱七八糟的数据都设置为UTF-8编码译码器

第二步使用GBK类:

#ifndef _QT_GBK_H
#define _QT_GBK_H

#include <QString>
#include <QTextCodec>
#include <string>
#include <QDebug>
using namespace std;

class GBK{

public:
    //QString(Unicode) -> std::string (GBK)
    static string FromUnicode(const QString &qstr){

        QTextCodec *pCodec = QTextCodec::codecForName("GB18030");
        if(!pCodec)
            return "";

        QByteArray arr = pCodec->fromUnicode(qstr);
        string cstr = arr.data();
        return cstr;
    }

    //std::string(GBK) -> QString(Unicode)
    static QString ToUnicode(const string &cstr){

        QTextCodec *pCodec = QTextCodec::codecForName("GB18030");
        if(!pCodec){

            qDebug() << "ToUnicode The pCodec is NULL";
            return "";
        }

        QString qstr = pCodec->toUnicode(cstr.c_str(), cstr.length());
        return qstr;
    }
};

#endif // _QT_GBK_H

通过调用FromUnicode和ToUnicode即可。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页