在Qt中,對文字檔案的操作進行了大幅簡化。相比C++較為複雜的檔案操作,Qt幾乎只需一兩行程式碼便可完成相應的功能。不過,不少新學Qt朋友可能都曾碰到過這樣的情況:如果文字檔案僅含有英文和數字,讀取的文字顯示正常;但是,要是文字中含有中文,顯示時就會出現亂碼。
那麼,究竟是什麼原因導致Qt讀取檔案時出現亂碼,出現了亂碼又該如何處理呢?
工具/原料
Qt
一、亂碼原因
在預設情況下,Qt 以 Unicode 格式處理文字字元,因此,字元本身是不會有問題的。之所以出現亂碼,原因在於 Qt 不知道將 Unicode 字元以何種方式顯示出來。
打個比方說,如果採用兩個位元組來儲存一個漢字,但顯示時卻按一個位元組一個位元組的方式,出現亂碼也就是理所當然的事了。
二、解決辦法
知道了原因,解決起來也就有了方向。為了避免亂碼,首選我們需要做的是在程式中指定文字編碼型別。例如,如果我們的文字檔案含有簡體中文,就指定為GBK。
接著,再按常規方法進行檔案開啟操作。
然後,像往常一樣逐行讀取文字資料。在這兒提醒大家注意,使用逐行讀取的方法,雖然讀取速度略慢,但是程式執行時所需要的記憶體比較少,特別是當檔案資料量很大時尤為如此。若是採用一次性讀取的方法,在讀取大檔案時會記憶體爆增。
下面,就到了關鍵的一步,將讀取到的行資料轉換為Unicode格式。注意,由於我們之前已經指定了GBK,所以這時文字將不會再顯示為亂碼。
下面是經過更改後的程式執行截圖。可以看到,完美地讀出了中文字元!