1. 程式人生 > >Qt源程式 在 linux 與 windows 下因原始檔編碼問題導致中文亂碼

Qt源程式 在 linux 與 windows 下因原始檔編碼問題導致中文亂碼

當Qt編輯器使用系統編碼的預設設定時

在windows 下,源程式中如果不包含中文,原始檔使用的是ASCII編碼,否則是GBK編碼。
在Linux下,源程式是是用UTF-8編碼的。


對於原始檔中一個像“abc”這樣的C語言字串是不包含編碼型別資訊的,而Qt中QString是以Unitcode來儲存字串的。所以在對QString 物件進行初始化時QString 如果不知道編碼方式就很可能出現亂碼。


解決辦法是在main中設定好編碼方式。

windows :

    QTextCodec *codec = QTextCodec::codecForName("GBK");
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);




Linux:

    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);


值得注意的是,所有QString的賦值在時間上都必是在上述程式碼之後。這意味著不可以為全域性的const QString賦值,全域性的QString也不能在定義時初始化。

 如果你是在Windows中進行程式設計,當你把檔案複製到Linux時,中文會出現亂碼,Qt Creater會提示你在當前編碼下無法編輯(如果沒有提示,可能是Qt的版本太低),並有一個讓你重新選擇編碼的按鈕。這時選擇GBK的方式開啟檔案,把文字複製出來,貼上到一個新建的文字檔案上,另存為UTF-8編碼就可以正常顯示了。 記得在main中把編碼改成

QTextCodec *codec = QTextCodec::codecForName("UTF-8");

相關推薦

Qt源程式linux windows 原始檔編碼問題導致中文亂碼

當Qt編輯器使用系統編碼的預設設定時 在windows 下,源程式中如果不包含中文,原始檔使用的是ASCII編碼,否則是GBK編碼。在Linux下,源程式是是用UTF-8編碼的。對於原始檔中一個像“abc”這樣的C語言字串是不包含編碼型別資訊的,而Qt中QString是以

LinuxWindows的網路程式設計區別

轉載:https://www.cnblogs.com/gildoringlorin/p/3951317.html socket相關程式從Windows移植到Linux下需要注意的: 1)標頭檔案  Windows下winsock.h/winsock2.h  Linux下

LinuxWindowstxt檔案區別

  一、區別 換行符:     1.windows中的換行符是\r\n, 2. linux/unix下的換行符是\n。 其中: 回車符:\r=0x0d (13) return; #回車(carriage return) 換行符:\n=0x0a (10) newline。#換行(newline)       二

Linuxwindows長路徑名

BTRFS 255 bytes exFAT 255 UTF-16 characters ext2 255 bytes ext3 255 bytes ext3cow 255 bytes ext4 255 bytes FAT32 8.3 (255 UCS-2 code un

JAVADES加解密在linuxwindows的相容問題(從ITEYE搬家過來的)

        前段時間做了DES加密解密,採用的是javax下的DES演算法,在windows下寫的倒挺快,現在部署到linux上測試的時候,組長一臉嚴肅的找到我,聲色俱厲地問我為毛測試資料都不能解密了!你寫的什麼JB毛演算法!馬上就要測試了!你給我搞神馬!    天地良心,我測的很棒的,還拉出來那個小

關於windows安裝mysql資料庫出現中文亂碼的問題

[WinMySQLAdmin] Server=E:/mysql/mysql-5.6.41-winx64/bin/mysqld-opt.exe user=root [mysql] default-character-set=utf8 [mysqld] lower_case_table_names=2 bas

vscode基於LinuxWindowsc/c++的多文件編譯連接

vscode c/c++ 有時寫寫小程序,又不想啟動2013,vscode就成了我的首選。剛接觸vscode的時候,跟著網上配置了一堆東西,總算能編譯C/C++了,但一涉及到多文件,我還得乖乖的打開vs2013。前些天在配置Linux上的vscode的時候,突然發現有網友在tasks.json

linux路徑分隔符'/'windows的分隔符'\',以及java項目,web項目讀取項目的路徑

oid ont resource light ros ren -i microsoft 配置文件 1, linux下的文件分隔符是‘/‘, windows下的文件分隔符為‘\‘。但是‘\‘這個符號是轉義符。如果需要在console輸出‘\‘這個符號的,你需要輸入‘\\‘。另

在Ubuntu16.04搭建samba,實現linuxwindows之間的資源共享

轉載於http://www.linuxdiyf.com/linux/24260.html   1、開始需要我們做的是先在我們的ubuntu下安裝好samba: 安裝samba:sudo apt-get install samba 安裝smbclient:sudo

LinuxWindows的sleepusleepusleep的區別

一、sleep (1)標頭檔案 在windows下標頭檔案:#include<windows.h> 在Linux下的標頭檔案:#include<unistd.h>   //unistd.h是Linux系統程式設計中最重要的檔案,包含了作業系統為程

Redis在LinuxWindows的安裝配置

一、Linux下安裝 # 下載 > wget http://download.redis.io/releases/redis-3.2.9.tar.gz # 解壓 > tar zxf r

linuxwindows的換行符

回車符號和換行符號產生背景  關於“回車”(carriage return)和“換行”(line feed)這兩個概念的來歷和區別。在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33)的玩意,每秒鐘可以打10個字元。但是它有一個問題,就是打完一

windows虛擬機的linux共享windows的一個文件夾

x86 star tools 8.0 pbm -h elk error: distrib 1、重新安裝VMware Tools,在VMware面板上選擇“虛擬機-重新安裝VMware tools…” 2、使用命令 Ctrl+Alt+T

linuxwindows安裝python拓展包及requirement.txt安裝類庫

too tor == 引導 -cp mod flask utf addition http://blog.csdn.net/pipisorry/article/details/39902327python拓展包安裝直接安裝拓展包默認路徑:Unix(Linux)默認路徑:/

LinuxWindows上獲取當前堆棧信息

flow ces mod exe mode return 開發 執行 too 在編寫穩定可靠的軟件服務時經常用到輸出堆棧信息,以便用戶/開發者獲取準確的運行信息。常用在日誌輸出,錯誤報告,異常檢測。 在Linux有比較簡便的函數獲取堆棧信息: #include <s

mysql數據庫在Linuxwindows免安裝實現以及框架開發碰到的問題

自動啟動 過程 root mil 是否 call 啟動頁 同時 ice 2017年7月23號下午5:20分,上周我根據自己的實際情況,總結了mysql數據庫在windows系統下和linux系統下免安裝版本的實現,以及在項目開發中遇到的數據庫報錯,今天整理出來,以供日後學習

[數據同步] LinuxWindows進行數據同步

linux windows 數據同步 實驗環境 服務端:Linux Centos 6.8 (10.208.131.198)客戶端:windows 2008 (10.208.131.199) 服務端一、安裝rsync服務 設置開機自啟動 # yum install xinetd rsync -y #

Linux入門之LinuxWindows常見對比

window linux與 簡要概述 目前使用最多的操作系統就是Windows和Linux,而Microsoft Windows操作系統占據了廣大使用者市場的大半江山,Windows如此受廣大用戶的青睞,那還有必要學習Linux操作系統嗎?既然Linux沒有被Windows擠出市場,那足以說明

linuxwindowsTIME_WAIT過多的解決辦法

iss abs apach cti ack tps als improve increase http://www.51testing.com/html/48/202848-249774.html linux和windows下TIME_WAIT過多的解決辦法 http:

LinuxWindows

hive one 正版 hang cto tail 文件創建 配置 發展 經過一周與Linux的接觸,學習了Linux的誕生,發展與現狀;也逐漸學習了越來越多的Linux的基本原理,指令與操作。算是對Linux有了一個基本的了解。與此同時,不禁在心裏和目前正在使用的wido