展示结果(中文“中文测试”):
UTF8源
UTF8源,用UTF8读,用UTF8写出:
中文测试
e4,b8,ad,e6,96,87,e6,b5,8b,e8,af,95
UTF8源,用GBK读,用UTF8写出:
涓枃娴嬭瘯
e6,b6,93,ee,85,9f,e6,9e,83,e5,a8,b4,e5,ac,ad,e7,98,af
UTF8源,用GBK读,用UTF8存,再用GBK读,用UTF8写出:
娑擃厽鏋冨ù瀣槸
e5,a8,91,e6,93,83,e5,8e,bd,e9,8f,8b,e5,86,a8,c3,b9,e7,80,a3,ee,85,a0,e6,a7,b8
GBK源
GBK源,用GBK读,用GBK存:(但是文件设置是默认utf8的)
���IJ���
d6,d0,ce,c4,b2,e2,ca,d4
GBK源,用GBK读,用UTF8存:(但是文件设置是默认utf8的)
中文测试
e4,b8,ad,e6,96,87,e6,b5,8b,e8,af,95
GBK源,用GBK读,用UTF8存,用GBK读,用UTF8存:(但是文件设置是默认utf8的)
涓枃娴嬭瘯
e6,b6,93,ee,85,9f,e6,9e,83,e5,a8,b4,e5,ac,ad,e7,98,af
背景介绍:
使用工具:qt库函数(编译版本:qt5.9)
影响因素:代码文件编码、读取方式编码、输出方式编码、设置编译器我使用的编码
测试函数代码:
void MainWindow::on_pushButton_clicked()
{
char * cc = "中文测试";
QByteArray show;
show = cover(cc,"GBK","UTF8");
//show = cover(show.data(),"GBK","GBK");
//按照字节,输出十六进制内容
for(int i=0;i<show.size();i++){
qDebug("%x",show.at(i));
}
ui->textBrowser->clear();
ui->textBrowser->append( QString(show) );
}
QByteArray MainWindow::cover(char* str1,char* t1,char* t2)
{
// QTextCodec::setCodecForLocale(utf8);
QTextCodec *type_a = QTextCodec::codecForName(t1);
QTextCodec *type_b = QTextCodec::codecForName(t2);
QString strUnicode= type_a->toUnicode(str1);
QByteArray bytes= type_b->fromUnicode(strUnicode);
return bytes;
}
另外,main函数中添加了指定本代码文件编码为UTF-8的函数
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
一些技巧
三个编码:
1.文档的编码
2.设置读取、输出的编码
3.设置程序的编码
一点常用的代码:
QTextStream stream(&readFile);
stream.setCodec("GBK");
QTextCodec* codec = QTextCodec::codecForName("UTF-8");
strAll = codec->toUnicode(readFile.readAll());
QTextCodec *codec = QTextCodec::codecForName("UTF-8");//或者"GBK",不分大小写
QTextCodec::setCodecForLocale(codec); //全局编码设置
以下为测试结果(旧):
代码文件UTF8,函数不做处理,结果:qdebug与界面控件均正常
代码文件UTF8,函数以UTF8读取,转为gbk输出,结果:全是黑色菱形方块问号
代码文件UTF8,函数以gbk读取,转为UTF8输出,结果:带有“涓”等奇怪的字
代码文件GBK,函数不做处理,结果:全是黑色菱形方块问号(且Qt Creator提示:warning: illegal character encoding in string literal)
代码文件GBK,函数以UTF8读取,转为gbk输出,结果为空
代码文件GBK,函数以gbk读取,转为UTF8输出,结果:全是“锟斤拷”