新浪博客

通过Qt的QTextCodec实现utf-8与gb2312编码字符的互转

2014-02-12 16:37阅读:
1.说明:
(1)QString类型变量内存储的内容都是以Unicode编码(Unicode不等于utf-8)解释的; (2)QTextCodec类对象的“toUnicode”函数将函数参数里的字符串 按照此QTextCodec对象对应的字符编码解释与读取,然后把它转为Unicode编码的字符串;
(3)QTextCodec类对象的“fromUnicode”函数将函数参数里的字符串 按照Unicode编码解释与读取,然后把它转为此QTextCodec对象对应的字符编码的字符串;
(4)std::string在此只用于保存字符串数据内容;
2.测试通过的代码:
void utf8ToGb2312(std::string& strUtf8)
{
QTextCodec* utf8Codec= QTextCodec::codecForName('utf-8');
QTextCodec* gb2312Codec = QTextCodec::codecForName('gb2312');


QString strUnicode= utf8Codec->toUnicode(strUtf8.c_str());
QByteArray ByteGb2312= gb2312Codec->fromUnicode(strUnicode);


strUtf8= ByteGb2312.data();
}
void gb2312ToUtf8(std::string& strGb2312)
{


QTextCodec* utf8Codec= QTextCodec::codecForName('utf-8');
QTextCodec* gb2312Codec = QTextCodec::codecForName('gb2312');


QString strUnicode= gb2312Codec->toUnicode(strGb2312.c_str());
QByteArray ByteUtf8= utf8Codec->fromUnicode(strUnicode);


strGb2312= ByteUtf8.data();
}


3.代码使用注意:
需要保证调用函数“QTextCodec::codecForName”返回不是空指针,可在程序启动时检查,这与Qt库的使用有关在此不多说。
*附件.
对QString更多的认识分享:程序中对QString类型变量直接赋值(如:QString strTest= '测试';)后,QString变量里存储的内容是将'测试'字符串的数据内容转码为Unicode编码后的字符串,而转码时候按照什么编码解释'测试'的内容由程序调用函数QTextCodec::setCodecForCStrings的参数决定。

我的更多文章

下载客户端阅读体验更佳

APP专享