• 用Qt程序打开.txt 文件的时候,出现乱码的情况


    打开*.txt 文件出现乱码的情况,说明编码格式不对,一般的Windows下创建的txt 文件,到ubuntu 系统中打开会出现乱码的情况,

    下面的代码读取文件,并且转化编码格式

        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语言使用''作为字符串结尾,而Unicode里恰恰有很多字符都有一个字节为0,这样一来,C语言的字符串函数将无法正常处理Unicode,除非把世界上所有用C写的程序以及他们所用的函数库全部换掉。
    于是,比Unicode更伟大的东东诞生了,之所以说它更伟大是因为它让Unicode不再存在于纸上,而是真实的存在于我们大家的电脑中。那就是:UTF。
    UTF= UCS Transformation Format,即UCS转换(传输)格式。
    它是将Unicode编码规则和计算机的实际编码对应起来的一个规则。现在流行的UTF有2种:UTF-8和UTF-16。
    这两种都是Unicode的编码实现。 

  • 相关阅读:
    Fiddler-常用技巧
    Fiddler-工作原理
    C语言-EOF和feof()判断文件结尾的区别
    C语言-一个fopen函数中未使用二进制模式(b)引发的血案
    VIM-不常用或不知道的技巧
    C语言-srand种子详解
    C语言-字符串操作函数
    C语言-Makefile经典教程(掌握这些足够)
    分布拟合——正态/拉普拉斯/对数高斯/瑞利 分布
    曲线拟合——(2)拉普拉斯/瑞利/对数正态 曲线
  • 原文地址:https://www.cnblogs.com/wanghuixi/p/7878600.html
Copyright © 2020-2023  润新知