Qt编码解决思路

Qt设置全局的编码格式

1
2
3
4
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);

说明: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编码解决思路/
作者
还在输入
发布于
2019年3月4日
许可协议