QT 打开txt文件以及出现的乱码问题

在用QT实现记事本打开功能时,在导入txt文件后会出现乱码问题,这时需要对导入文件编码进行设置。代码如下:

void MainWindow::open()
{
    QString fileName;
    //弹出打开文件对话框
    fileName = QFileDialog::getOpenFileName(this, tr("打开文件"),
                                                    "/",
                                                    tr("文本文档 (*.txt *.doc)"));
    if(!fileName.isEmpty())
    {
        QFile file(fileName);
        if (file.open(QFile::ReadOnly | QFile::Text))
        {
            QTextStream toText(&file);
	    //设置文件流编码方式
            toText.setCodec("GBK");
            textEdit->setPlainText(toText.readAll());
        }
        this->setWindowTitle(fileName+"notebook");
    }
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 接下对与编码问题进行回顾和总结: 

GB2312 :是对 ASCII 的中文扩展。兼容ASCII;

GBK: 包括了 GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号;

GB18030:在GBK基础上加入少数民族的几千个新字,扩展成GB18030;

Unicode:所有的字符被一视同仁,汉字不再使用“两个扩展ASCII”,而是使用“1个Unicode”,注意,现在的汉字是“一个字符”了,于是,拆字、统计字数这些问题也就自然而然的解决了。但是,这个世界不是理想的,不可能在一夜之间所有的系统都使用Unicode来处理字符,所以Unicode在诞生之日,就必须考虑一个严峻的问题:和ASCII字符集之间的不兼容问题。 

我们知道,ASCII字符是单个字节的,比如“A”的ASCII是65。而Unicode是双字节的,比如“A”的Unicode是0065,这就造成了一个非常大的问题:以前处理ASCII的那套机制不能被用来处理Unicode了。
另一个更加严重的问题是,C语言使用'\0'作为字符串结尾,而Unicode里恰恰有很多字符都有一个字节为0,这样一来,C语言的字符串函数将无法正常处理Unicode,除非把世界上所有用C写的程序以及他们所用的函数库全部换掉。
于是,比Unicode更伟大的东东诞生了,之所以说它更伟大是因为它让Unicode不再存在于纸上,而是真实的存在于我们大家的电脑中。那就是:UTF。
UTF= UCS Transformation Format,即UCS转换(传输)格式。
它是将Unicode编码规则和计算机的实际编码对应起来的一个规则。现在流行的UTF有2种:UTF-8和UTF-16。
这两种都是Unicode的编码实现。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

转载一片解决QT中出现的中文乱码的好文章《 qt中文乱码问题http://blog.csdn.net/brave_heart_lxl/article/details/7186631





  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值