低谷期一定要默默的熬过去,别去打扰任何人,否则留下的只是别人的笑柄,不论幸或不幸,你的挣扎无人能见,无人能懂。。。
---- 网易云热评
一、定义一个枚举
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 //文件对话框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 < 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
(2) 定义全局变量 QTextCodec *codec;
(3) 构造函数内部初始化:
codec = QTextCodec::codecForName("GBK");
(4) gbk > utf-8:codec->toUnicode()
(5) utf-8 > gbk: codec->fromUnicode()
欢迎关注公众号:顺便编点程