qt按照不同编码格式读取文字(UTF-16LE,UTF-8,UTF-8BOM,UTF-16BE)

news/2024/11/14 8:04:49/
enum class EncodingFormat : int
{ANSI = 0,//GBKUTF16LE,UTF16BE,UTF8,UTF8BOM,
};
EncodingFormat VideoPlayer::FileCharacterEncoding(const QString &fileName)
{//假定默认编码utf8EncodingFormat code = EncodingFormat::UTF8;QFile file(fileName);if (file.open(QIODevice::ReadOnly)){//读取3字节用于判断QByteArray buffer = file.read(3);quint8 sz1st = buffer.at(0);quint8 sz2nd = buffer.at(1);quint8 sz3rd = buffer.at(2);if (sz1st == 0xFF && sz2nd == 0xFE){code = EncodingFormat::UTF16LE;}else if (sz1st == 0xFE && sz2nd == 0xFF){code = EncodingFormat::UTF16BE;}else if (sz1st == 0xEF && sz2nd == 0xBB && sz3rd == 0xBF){code = EncodingFormat::UTF8BOM;}else{//尝试用utf8转换,如果无效字符数大于0,则表示是ansi编码QTextCodec::ConverterState cs;QTextCodec* tc = QTextCodec::codecForName("utf-8");tc->toUnicode(buffer.constData(), buffer.size(), &cs);code = (cs.invalidChars > 0) ? EncodingFormat::ANSI : EncodingFormat::UTF8;}file.close();}return code;
}

上面是解析文件格式,下面是按照格式读取内容

QString srtfile = "D://test.srt";
EncodingFormat code = FileCharacterEncoding(srtfile);QFile file(srtfile);if(!file.open(QIODevice::ReadOnly)) {qDebug()<<"未找到外挂字幕文件:"<<srtfile<<endl;}m_SrtInfoLst.clear();QTextCodec::ConverterState state;QTextCodec *codec = QTextCodec::codecForName("UTF-8");if(code==EncodingFormat::UTF16LE){codec = QTextCodec::codecForName("UTF-16LE");}else if(code==EncodingFormat::UTF8){codec = QTextCodec::codecForName("UTF-8");}else if(code==EncodingFormat::UTF8BOM){codec = QTextCodec::codecForName("UTF-8");}else if(code==EncodingFormat::UTF16BE){codec = QTextCodec::codecForName("UTF-16BE");}QTextStream stream_src(&file);stream_src.setCodec(codec);//这里就是按照对应格式解析出来了while(!stream_src.atEnd()) {QString str = stream_src.readLine();//一行一行获取内容//TODO:......}file.close();


http://www.ppmy.cn/news/1235433.html

相关文章

【分享】Java Builder 建造者模式之案例分享

介绍 建造者模式&#xff08;Builder&#xff09;核心目的是通过使用多个简单对象一步步构建出一个复杂对象。通过将复杂对象的构造过程拆分为多个简单的步骤&#xff0c;使得创建对象更加灵活&#xff0c;可读性和可维护性更强。 使用场景 创建一个由多个部分组成的复杂对象…

轻量封装WebGPU渲染系统示例<37>- 多个局部点光源应用于非金属材质形成的效果(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/BasePbrMaterialMultiLights.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下&#xff1a; export class BasePbrMaterial…

解决“使用 CNKI 保存时发生错误。改为尝试用 DOI 保存。”【Bug Killed】

文章目录 简介解决办法跟新本地Zotero中茉莉花插件的非官方维护中文翻译器更新网页插件Zetero Connector中的Transtors 结语参考资料 简介 使用Chrome ➕ Zotero Connector保存中国知网&#xff08;CNKI&#xff09;的参考文献到本地的Zotero时无法正常保存&#xff0c;出现使…

设计师不能忽视的几个宝藏图标设计工具

在这个快速变化的时代&#xff0c;设计师对创新和实用工具的需求越来越大。这就要求我们及时跟上潮流&#xff0c;不断探索和尝试最新、最有价值的图标设计工具。只有这样&#xff0c;我们才能在竞争激烈的设计市场中脱颖而出。以下是我们精心挑选的2024年值得一试的图标设计工…

基于安卓android微信小程序的好物分享系统

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&a…

想自学软件测试?一般人我还是劝你算了吧。。。

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

SpringBoot:kaptcha生成验证码

GitHub项目地址&#xff1a;GitHub - penggle/kaptcha: kaptcha - A kaptcha generation engine. kaptcha介绍 kaptcha官网&#xff08;Google Code Archive - Long-term storage for Google Code Project Hosting.&#xff09;对其介绍如下&#xff0c; kaptcha十分易于安装…

DrugMAP: molecular atlas and pharma-information of all drugs学习

DrugMAP&#xff1a;所有药物的分子图谱和制药信息 - PMC (nih.gov) DrugMAP: the molecular atlas and pharma-information of drugs (idrblab.net) 构建了一个描述药物分子图谱和药物信息的新数据库&#xff08;DrugMAP&#xff09;。它提供了>30 000种药物/候选药物的相…