日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Qt文件编码转换工具(二) C++判断文件编码

發布時間:2025/3/15 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt文件编码转换工具(二) C++判断文件编码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

下載鏈接

上一節

如何判斷文件編碼

下一節


?

下載鏈接

Realase打包版本下載:

Qt文本轉化工具 realase版本

https://download.csdn.net/download/qq78442761/10927836

?

Qt文件編碼轉換工具源碼

https://download.csdn.net/download/qq78442761/10927834

?

上一節

Qt文件編碼轉換工具(一) 項目介紹

https://blog.csdn.net/qq78442761/article/details/86555753

程序運行截圖如下:

?

如何判斷文件編碼

這一節來說明下文件編碼,這里舉一個UTF-8的例子!

在Windows端,創建一個txt文件,空文件,這里Windows會自動把他判斷為ASCII編碼!

此時的文件大小:

如果把他給成UTF-8編碼,此時還是空文件,但還是有3字節:

現在以十六進制看看這文件:

這里就可以知道如何判斷了!

此時會多出一個文件頭!!!通過這個文件頭即可判斷,這里來總結下其他編碼:

?

ASCII非下面3個
UnicodeFF FE
Unicode big endian?FF FF
UTF-8??EF BB BF

這里其實可以根據前面2個字節即可判斷!

?

下面來看看Qt源碼:

這里采用簡單工廠,這里只給出了偽代碼,要源碼請在博文上面下載:

filetype.h

#ifndef FILETYPE_H #define FILETYPE_H#include <QString> #include <QDebug>class FileType{public:virtual QString getFileType(){ return ""; }virtual ~FileType(){ qDebug() << "FileType disconstraction called!"; } };class ASCIIFileType: public FileType{public:QString getFileType() override{return "ANSI";} };class UTF8FileType: public FileType{public:QString getFileType() override{return "UTF-8";} };class UniFileType: public FileType{public:QString getFileType() override{return "Unicode";} };class UniEndFileType: public FileType{public:QString getFileType() override{return "Unicode big endian";} };class FileTypeFactory{public:static FileType *createFileTypeFactory(QByteArray byteArray){FileType *fileType;if(byteArray == "\xEF\xBB"){ //UTF-8fileType = new UTF8FileType;}else if(byteArray == "\xFF\xFE"){ //UnicodefileType = new UniFileType;}else if(byteArray == "\xFE\xFF"){ //Unicode big endianfileType = new UniEndFileType;}else{fileType = new ASCIIFileType;}return fileType;} };#endif // FILETYPE_H

下面給出一個調用的代碼:

void DisposeFile::transformFile(const QString &sourceFile) {QFile file(sourceFile);if(!file.open(QIODevice::ReadOnly)){qDebug() << "open failed!";return;}QByteArray byteArray = file.readAll();//qDebug() << "byteArray:" << QString::frombyteArray;FileType *fileType = FileTypeFactory::createFileTypeFactory(byteArray.left(2));GenDialog *genDialog = new GenDialog(NULL ,m_currentFileName, fileType->getFileType());if(genDialog->exec() == QDialog::Accepted){QString head = genDialog->getArmStr();saveFile(head, fileType->getFileType(),byteArray);}delete genDialog;delete fileType;file.close(); }

?

如何實現UTF8和ASCII之間的編碼轉換!

通過Qt的QString中QString::fromLocal8Bit和QStirng::fromUtf8即可:

if(head == "ASCII"){if(sourceCode == "UTF-8"){file.write(QString::fromUtf8(data).toStdString().c_str());}else{file.write(QString::fromLocal8Bit(data).toStdString().c_str());}}else{if(sourceCode == "UTF-8"){file.write("\xEF\xBB\xBF");file.write(QString::fromUtf8(data).toStdString().c_str());}else{file.write("\xEF\xBB\xBF");file.write(QString::fromLocal8Bit(data).toStdString().c_str());}}

?

下一節

下一節將給出Qt界面設計

https://blog.csdn.net/qq78442761/article/details/86556068

總結

以上是生活随笔為你收集整理的Qt文件编码转换工具(二) C++判断文件编码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。