低谷期一定要默默的熬过去,别去打扰任何人,否则留下的只是别人的笑柄,不论幸或不幸,你的挣扎无人能见,无人能懂。。。
---- 网易云热评
一、定义一个枚举
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()
欢迎关注公众号:顺便编点程