Qt4.8编码转换之GBK2UTF8
在项目中难免遇到编码转换的问题,一般我的开发项目中,代码的编码格式都是GBK,但是在其他平台上可能用的编码方式为UTF8,这时候编码转化就成为一个问题了。在之前的开发方式中老是遇到这种情况,在本机编译的代码,在本机运行oK,但是在其他机器上编译时却无法正确的进行编码转换?这是什么原因呢,原来在Qt中,会去寻找系统字符集编码库,如果我们设置了QTextCodec为GB18030字符集,在开发机运行环境中,一般都可以运行,但是在其他设备上,有时却无法获取?因为在其他设备上可能没有GB18030字符集,这时候就有可能导致无法转换相应的编码了。
解决方案
在Qt的源码中其实已经提供了中文编码的转换功能,只不过这部分代码是属于plguin方式存在的,
并没有并到主干代码里,在QT5.0版本之后可以直接使用GB18030格式,但是在Qt4.8中,这部分功能需要另外添加支持。
HOW TO
- 拷贝两个文件到你的工程目录,
C:\Qt\4.8.6\src\plugins\codecs\cn\qgb18030codec.h
C:\Qt\4.8.6\src\plugins\codecs\cn\qgb18030codec.cpp - 添加文件到你的工程目录
在你的代码里添加头文件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"));
这样就实现了。