Qt5下,QTextStream写文件时改变文件编码

在Qt5.12.2版本中,使用QTextStream操作文件时,若不设置编码,可能导致文件编码变化。为确保文件以特定编码(如带BOM的UTF-8)写入,需要调用QTextStream的setCodec和setGenerateByteOrderMark函数。读文件时Qt可能自动匹配正确编码,但写文件时必须明确指定编码设置。
摘要由CSDN通过智能技术生成

Qt版本

Qt5.12.2下验证无误,应该也适用于Qt5的其它版本

问题描述

使用QTextStream先读文件再写回去,发现文件编码改变了,主要代码片段如下:

// 从文件读取内容,处理内容后,重新写回原文件,发现文件编码不一致了
// 1.读文件
QFile file(targetFilePath);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream ioStream(&file);
QString fileContentStr = ioStream.readAll();
file.close();

...  // 2.处理文件内容 fileContentStr

// 3.写回原文件
file.open(QIODevice::WriteOnly | QIODevice::Text);
ioStream.setDevice(&file);
ioStream<<fileContentStr;
file.close();

原因与解决

如果对写文件的编码有固定的要求(比如带bom的utf-8编码,Windows VS2019下开发,含中文的源文件需要这样编码),那么需要调用QTextStream的两个关键函数:setCodecsetGenerateByteOrderMark,显式的指定目标文件的编码方式,仅使用默认构造的QTextStream对象是不行的。修改后代码片段如下(缩进的4行是改动部分):

// 从不带bom的utf
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值