Qt讀取文件亂碼

轉載來自:https://blog.csdn.net/huang1600301017/article/details/121174229

編碼問題回顧和總結:
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的編碼實現。 

    QFile file("2.txt");
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        return false;
    }
 
    QTextStream toText(&file);
    toText.setCodec("GBK");//設置文件流編碼方式
    //QString str = toText.readAll().trimmed();
    while(!toText.atEnd()) {
        QString str = toText.readLine().trimmed();
        qDebug() << "str = " << str;
    }

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章