Qt4.8编码转换之GBK2UTF8

Qt4.8编码转换之GBK2UTF8

在项目中难免遇到编码转换的问题,一般我的开发项目中,代码的编码格式都是GBK,但是在其他平台上可能用的编码方式为UTF8,这时候编码转化就成为一个问题了。在之前的开发方式中老是遇到这种情况,在本机编译的代码,在本机运行oK,但是在其他机器上编译时却无法正确的进行编码转换?这是什么原因呢,原来在Qt中,会去寻找系统字符集编码库,如果我们设置了QTextCodec为GB18030字符集,在开发机运行环境中,一般都可以运行,但是在其他设备上,有时却无法获取?因为在其他设备上可能没有GB18030字符集,这时候就有可能导致无法转换相应的编码了。

解决方案

在Qt的源码中其实已经提供了中文编码的转换功能,只不过这部分代码是属于plguin方式存在的,
并没有并到主干代码里,在QT5.0版本之后可以直接使用GB18030格式,但是在Qt4.8中,这部分功能需要另外添加支持。

HOW TO

  1. 拷贝两个文件到你的工程目录,
    C:\Qt\4.8.6\src\plugins\codecs\cn\qgb18030codec.h
    C:\Qt\4.8.6\src\plugins\codecs\cn\qgb18030codec.cpp
  2. 添加文件到你的工程目录
    在你的代码里添加头文件qgb18030codec.h

3. 实现你的转换功能函数



    QString ByteToString( QByteArray data)
    {
        QGb18030Codec *code = new QGb18030Codec();
        QString str =  code->convertToUnicode( data.data(), data.length(), 0 );
        delete code;
        return str;
    }


    QByteArray StringToByte( QString data )
    {
        QGb18030Codec *code = new QGb18030Codec();
        QByteArray byte =  code->convertFromUnicode( data.data(), data.length(), 0 );
        delete code;
        return byte;
    }

// 当然别忘了在main.cpp里加上这部分代码
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));    

这样就实现了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值