Qt编码解决思路
Qt设置全局的编码格式
1 |
|
说明:setCodecForLocale是设置程序运行的本地编码格式 ,例如QString data=”测试”,根据上述代码,此处将data处理为UTF-8。setCodecForTr是设置tr(data)要处理的编码格式,例如上述代码tr(data)会处理utf8编码,此处显示则是正常的中文,因为local的编码也是UTF-8,两者一致。而如果此处data是gbk编码,那么会显示中文乱码。setCodecForCStrings(codec) 是给QString 设置对应的编码,同理tr函数。
Qt解析GB2312编码xml转换GB2312->UTF-8
QFile file(filename);
if(!file.open(QFile::ReadOnly | QFile::Text)){
return;
}
QTextCodec *gbk=QTextCodec::codecForName("GBK");
QTextStream stream(&file);
stream.setCodec(gbk); //此处为重点
QString data=stream.readAll();
qDebug()<<data;
QDomDocument document;
QString error;
int row = 0, column = 0;
document.setContent(data, false, &error, &row, &column);
此处使用QtextStream读取QFile,因为它可以设置源文件的编码格式,然后read之后会自动将gbk编码转化成utf的QString。所以此处给我们一个思路,只要我们知道源数据的编码格式,读取的时候设置对应的编码即可,QT会自动转换成utf-8(前提是已经设置了上述全局)。
Qt编码解决思路
http://yoursite.com/2019/03/04/Qt编码解决思路/