Qt5.12简易生成CSV文件

本文记录了在Windows10环境下,使用Qt5.12进行CSV文件的生成和读取过程。作者遇到编码问题,从GBK到GB18030再到Unicode,最终解决了乱码问题。Qt默认编码为UTF-8,CSV文件内容以半角逗号分隔。源码展示了如何用QFile和QTextStream进行文件操作。注意,某些系统可能会锁定文件导致读写失败。
摘要由CSDN通过智能技术生成

序言

项目要求生成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没有自动解锁功能,起码我不会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

溪渣渣_梁世华

打赏?我甚至没有任何收费的章节

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值