qt按照不同編碼格式讀取文字(UTF-16LE,UTF-8,UTF-8BOM,UTF-16BE)

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.pswp.cn/news/163449.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163449.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163449.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

「 系統設計 」 為什么要做架構分層?

「 系統設計 」 為什么要做架構分層&#xff1f; 參考&鳴謝 3.設計模式之分層思維&#xff1a;為什么要做代碼分層架構&#xff1f; 從零開始學架構&#xff08;八&#xff09;分層架構和設計模式 架構模式之分層架構總結 文章目錄 「 系統設計 」 為什么要做架構分層&…

解決 IDEA下VUE項目 @符號無法識別的問題

根目錄新建jsconfig.json {"compilerOptions": {"baseUrl": "./","paths": {"/*": ["src/*"]}},"exclude": ["node_modules","dist"] }

IT支持團隊的績效指標和最佳實踐

一名員工在遠程時因筆記本問題尋求IT支持&#xff0c;盡管他們多次嘗試排除故障&#xff0c;但由于缺乏專業知識&#xff0c;最終還是無法訪問工作所需的應用程序。這時&#xff0c;他們需要一名專業的 IT 技術人員來指導他們&#xff0c;但他們只能等待有人注意到并回應他們的…

海報設計必備:揭秘5款炙手可熱的設計工具

1.即時設計&#xff1a;能實現在線協作的海報設計軟件 即時設計作為 2020 年上線的國產設計工具&#xff0c;目前已經有了超百萬的注冊用戶&#xff0c;獲得了廣大設計師的一致好評。與其他傳統海報設計軟件相比&#xff0c;即時設計具有這幾個優點&#xff1a;一是所有功能都…

Chrome 訪問不了項目?10080端口 ERR_UNSAFE_PORT:問題原因 / 解決方案

文章目錄 被禁用端口列表解決方法方法一、更換端口 / 使用代理 / 使用域名方法二、對瀏覽器下手WindowsMac 最近有客戶反饋&#xff0c;在chrome瀏覽器中訪問不了項目&#xff0c;其他瀏覽器都是正常的。 &#xff1f;奇了怪了&#xff0c;難道客戶對chrome做了什么操作&#x…

Docker | Docker入門安裝

?作者簡介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;熱愛Java后端開發者&#xff0c;一個想要與大家共同進步的男人&#x1f609;&#x1f609; &#x1f34e;個人主頁&#xff1a;Leo的博客 &#x1f49e;當前專欄&#xff1a;Docker系列 ?特色專欄&#xff1a; My…

探索WebStorm 2023 Mac/win:最強大的JavaScript開發工具

在當今的軟件開發領域&#xff0c;JavaScript已經成為了一種不可或缺的編程語言。而在眾多的JavaScript開發工具中&#xff0c;WebStorm一直以其強大的功能和友好的用戶界面脫穎而出。現在&#xff0c;我們迎來了全新的WebStorm 2023版本&#xff0c;它將帶給開發者們更加出色的…

有機紡織品OCS認證

【有機紡織品OCS認證】 有機產品是指按照這種方式生產和加工的產品。產品符合國際或者國家有機產品要求標準&#xff0c;并通過國家認證機構認證的一切農副產品及其加工品&#xff0c;包括糧食、蔬菜、水果、奶制品、禽畜產品、天然纖維等。 有機紡織品認證是指在使用經過國際或…

華中科技大學李松課題組,利用機器學習預測多孔材料水吸附等溫線

多孔材料的水吸附等溫線是一個非常重要的參數&#xff0c;但這一參數的獲得并不容易。這是因為多孔材料種類過多、結構多元&#xff0c;通過實驗和計算的方式獲得水吸附等溫線數據成本過高&#xff0c;耗時過長。 華中科技大學的李松課題組&#xff0c;建立了一個兩步機器學習模…

LeetCode [簡單] 283. 移動零

給定一個數組 nums&#xff0c;編寫一個函數將所有 0 移動到數組的末尾&#xff0c;同時保持非零元素的相對順序。 請注意 &#xff0c;必須在不復制數組的情況下原地對數組進行操作。 283. 移動零 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 快慢指針&…

可以在uni-app使用的類vconsole.js插件

興致勃勃在uni-app項目引入調試工具vconsole.js結果真機調試頁面空白 怎么辦?! 別著急 paradox老師有方法 替代插件下載地址&#xff1a;直接下載插件并引入HbuilderXuni_modules插件 - 類Vconsole APP端調試工具 - HF調試器 - DCloud 插件市場 下載完成在main.js中引入&…

鴻蒙開發環境搭建-deveco-studio 開發工具安裝問題()

從華為官網下載工具deveco-studio, 下載地址 HUAWEI DevEco Studio和SDK下載和升級 | HarmonyOS開發者 這是下載后的工具 1、一步步安裝步驟 報錯了&#xff0c;一般安裝都會報這個錯誤 看似問題不小&#xff0c;其實&#xff0c; 繼續下步&#xff0c;就正常了&#xff0c…

棧回溯--在棧里挑出返回地址

GNU Arm Embedded Toolchain project files : GNU Arm Embedded Toolchain arm-none-eabi-addr2line -e F103_Moduel.axf -a -f 08000350 08001d94 0800260c 匯編中&#xff1a; ;HardFault_Handler ; PROC ; EXPORT HardFault_Handler …

神命令tree的魅力你get到了嗎?

背景 日常工作中&#xff0c;有時候為了明確表達自己的意思&#xff0c;往往需要輸出對應的目錄層級結構&#xff0c;手動一個個輸入往往顯得不那么高級&#xff0c;效率相對較低&#xff0c;這時候擁有可以一鍵輸出目錄結構并且可以快速轉化為文本的工具就比較方便&#xff0…

工業I/O模塊的功能和應用介紹

在工業領域中&#xff0c;不同的設備常常適配不同的通信協議&#xff0c;不同的協議之間無法直接互通&#xff0c;導致現場實施過程中困難重重。工業io模塊可以將各種現場信號轉化為數字信號&#xff0c;然后傳輸給控制器進行處理&#xff0c;實現不同設備之間的互通&#xff0…

抖音直播招聘報白企業或者人力資源公司怎么做?

抖音直播招聘報白是指進入抖音的白名單&#xff0c;允許在直播間或小視頻中發布招聘或找工作等關鍵詞。否則會斷播、不推流、限流。抖音已成為短視頻流量最大的平臺&#xff0c;但招聘企業數量較少。抖音招聘的優勢在于職位以視頻、直播方式展示&#xff0c;留存聯系方式更加精…

生命周期評估(LCA)與SimaPro碳足跡分析

SimaPro提供最新的科學方法和數據庫以及豐富的數據&#xff0c;使您可以收集和評估產品和流程的環境績效。通過這種方式&#xff0c;您可以將改變公司產品生命周期的想法提交給您的同事&#xff0c;以便闡明您的業務未來。 SimaPro軟件的特點和功能&#xff1a; 完全控制產品生…

delete archivelog all 無法徹底刪除歸檔日志?

1、演示環境 SQL> select * from v$version where rownum<2;BANNER ---------------------------------------------------------------- Oracle Database 10g Release 10.2.0.3.0 - 64bit ProductionSQL> select inst_id,instance_name from gv$instance; -->兩節…

【matlab程序】南海土臺風畫法

【matlab程序】南海土臺風畫法 圖片 往期推薦 圖片 【python海洋專題一】查看數據nc文件的屬性并輸出屬性到txt文件 【python海洋專題二】讀取水深nc文件并水深地形圖 【python海洋專題三】圖像修飾之畫布和坐標軸 【Python海洋專題四】之水深地圖圖像修飾 【Python海洋專…

2020年09月 Scratch(三級)真題解析#中國電子學會#全國青少年軟件編程等級考試

Scratch等級考試(1~4級)全部真題?點這里 一、單選題(共25題,每題2分,共50分) 第1題 執行下面程序,屏幕上最多會看到多少個蘋果? A:10個 B:11個 C:1個 D:無法確定 答案:B 第2題 關于下面程序,說法正確的是 ? A:執行 后,馬上執行