序言
项目要求生成CSV文件,但是却想岔了卡住几个小时,特地上来写一下记录下
之前我将CSV文件转成TXT文件时,发现其编码为GB2312编码,用UltraEdit直接查看发现是GBK编码,所以我将内容转成可向下兼容GBK和GB2312的GB18030编码,结果一直是乱码,百思不得其解,后来干脆减少了一个步骤,转成Unicode编码,然后就成了…
一、环境
Windows10
Qt5.12——默认UTF-8编码
CSV文件——默认Unicode编码
二、CSV文件格式
其实实际就是,每个表格内容用半角符号逗号隔开即可,半角逗号就是用英文的逗号,全角逗号是输入法中文的逗号
测试1,测试2,测试3
测试4,测试5,测试6
别问我怎么Qt去设置其在CSV文件里以什么格式显示,单元格合并什么的,问就是做不到。
三、编码转换
四、源码
1、生成CSV文件
QFile file("./test.csv");
if( !file.open( QIODevice::ReadWrite )) {
return;
}
QTextStream out( &file );
QTextCodec *utf8 = QTextCodec::codecForName( "UTF-8" );
out<< utf8->toUnicode( "测试1,测试2,测试3\n" );
out<< utf8->toUnicode( "测试4,测试5,测试6\n" );
out.flush();
file.close();`
2、读取CSV文件
QFile file("./test.csv");
if( !file.open( QIODevice::ReadWrite )) {
return;
}
QTextStream in( &file );
QTextCodec *utf8 = QTextCodec::codecForName( "UTF-8" );
QList< QStringList > fileDataList;
while( !in.atEnd() ) {
QString data = utf8->fromUnicode( in.readLine() );
QStringList dataList = data.split(",");
fileDataList.append( dataList );
}
qDebug()<< fileDataList;
file.close();`
如果有一些是以\r\n
为换行的,那就可以file.open( QIODevice::ReadWrite )
加个QIODevice::Text
即
file.open( QIODevice::ReadWrite | QIODevice::Text )
QIODevice::Text可以将\r\n
看作\n
注:某些公司的电脑会自动为所有文件上锁,这种的,只要直接修改保存通常都会读取成乱码,我暂时无能为力,如果你问为什么Qt的文件能正常使用打代码,而用Qt操作文件却成了问题?你试试用笔记本打开那些被上锁的文件就知道了。
因为Qt的IO操作是直接对准这个文件的所有数据,Qt的IO没有自动解锁功能,起码我不会。