一、定义一个枚举
enum MyCode { utf_8,gbk };
二、定义一个枚举变量,默认设置为utf_8
enum MyCode flag; flag=utf_8;
三、设置编码按钮槽函数
void MainWindow::on_actionUTF8_triggered() { flag=utf_8; ui->label->setText("当前以UTF8编码显示"); } void MainWindow::on_actionGBK_triggered() { flag=gbk; ui->label->setText("当前以GBK编码显示"); }
四、编写打开按钮槽函数
1、打开一个文件,获取文件目录
#include <QFileDialog> //文件对话框 QString path=QFileDialog::getOpenFileName();//获取文件路径 if(path.isEmpty()) //如果路径是空,跳出 { return; }
2、将Qstring转换为char *,fopen需要char *
std::string str=path.toStdString(); const char *filename=str.c_str(); 解决中文路径 std::string str=code->fromUnicode(path).data(); const char *filename=str.c_str();
3、打开文件,如果有中文,需要转换gbk
FILE *fp; errno_t err; if((err=fopen_s(&fp,filename,"rb"))!=0) { cout <<"打开文件失败"; cout <<err; return; } cout <<"打开文件成功";
4、循环读取文件内容,每次读取一行fgets()
char buf[1024]; QString str1=""; while (1) { memset(buf,0,sizeof (buf)); fgets(buf,sizeof (buf),fp); if(flag==utf_8){ //判定是那种编码,并显示出来 str1=str1+buf; }else if (flag==gbk){ str1=str1+code->toUnicode(buf); } if(feof(fp)){ break; }
需要注意的事项:
(1) 包含头文件 #include <QTextCodec>
(2) 定义全局变量 QTextCodec *codec;
(3) 构造函数内部初始化:
codec = QTextCodec::codecForName("GBK");
(4) gbk > utf-8:codec->toUnicode()
(5) utf-8 > gbk: codec->fromUnicode()