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個 |
| Unicode | FF 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++判断文件编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ STL list构造
- 下一篇: Qt工作笔记-Windows上界面滑动效