九色91_成人精品一区二区三区中文字幕_国产精品久久久久一区二区三区_欧美精品久久_国产精品99久久久久久久vr_www.国产视频

Hello! 歡迎來到小浪云!


QT 應用程序在 Windows 系統上出現中文亂碼


avatar
小浪云 2025-05-26 18

windows 系統上使用 qt 開發應用程序時,可能會遇到中文亂碼問題。即使 Windows 已經全面轉向 unicode 編碼,但有時仍會因為編碼不匹配而出現亂碼。以下是詳細的分析和解決方案:

QT 應用程序在 Windows 系統上出現中文亂碼 alt=”qt 應用程序在 Windows 系統上出現中文亂碼” />

Windows 早期采用多字節編碼,的確容易出現亂碼問題。隨著 Windows 全面轉向 Unicode 編碼,多語言的支持得到了極大改善,出現中文亂碼的問題變得較少。出現亂碼問題一般是由于 GBK 編碼的文件被當做 utf8 編碼打開,或者 utf8 編碼的文件被當做 GBK 編碼打開。這種情況也多出現在 Linux 和 Windows 之間交換文件。

最近幾個月開始使用 QT 開發應用程序,無論是在 Windows 還是 Linux 系統下,沒有特別配置,編寫出來的應用程序都能很好地顯示各種語言。即使在 Linux 系統中選擇英語語言設置,也能正常顯示中文、日文等。

然而,今天遇到了一個 QT 應用程序在 Windows 下出現中文亂碼的問題,令人措手不及。

具體情況是這樣的,QT 代碼來自他人,別人提供的可執行程序沒有中文亂碼問題。但是在我這里編譯這個 QT 項目,生成的程序卻出現了亂碼。

首先,我懷疑代碼采用了 GBK 之類的編碼,但經過逐一檢查,發現都是采用 utf8 編碼,使用記事本打開和保存時都能正常顯示。通常,采用 utf8 編碼是一個非常安全的方案,全程使用 utf8 對多語言的支持是最好的。

那么問題是否出在 Windows 特有的 utf8 bom 上呢?

這里需要提一下,BOM 代表 Byte order mark,即字節序標記,有兩個作用:

  1. 說明字符流屬于 Unicode 編碼,且表明了編碼方式。
  2. 說明了字節序:big endian 和 little endian。

一般來說,utf8 不需要 BOM,這是微軟搞出來的。由于 Windows 是使用最廣泛的操作系統,盡管 Linux 程序員極度抵制 utf8 BOM,但也無法阻止它的存在。

但是在 QT 應用程序的亂碼問題上,utf8 BOM 并沒有什么關系。是否帶 BOM 只是文件頭幾個字節的差異,要么直接出錯,不會引起亂碼。

而且這個亂碼問題還非常奇怪,在 QT 界面設計器中輸入的中文顯示正常,但是通過 c++ 代碼添加的字符串就有亂碼問題。難道是字符串類的問題嗎?但我在代碼中使用的是 QString,內部就是用的 utf8 編碼,即使我強行指定 utf8 編碼,問題也沒有解決。

這個問題我也咨詢過 gpt,GPT 給出的方法是檢查源碼的編碼、編輯器的編碼設定、使用 QString 的編碼轉換方法等,但都沒有效果。

中文亂碼問題可能只會出現在中文世界,中國程序員碰到的幾率會更大,于是我上網搜索,使用“QT 中文亂碼”作為關鍵詞,果然找到了很多相關討論。其中一篇文章提到:

在 Qt Creator 中使用 MSVC 編譯器編譯項目時,如果處理不當,容易出現中文字符串亂碼問題。例如,程序運行時,LabInfo 顯示的漢字就會出現亂碼。

void MainWindow::Changed() {     QString str="測試";     ui->LabInfo->setText(str); }

這是因為 Qt Creator 保存的文件使用的是 UTF-8 編碼(是任何平臺、任何語言都可以使用的跨平臺字符集),MSVC 編譯器雖然可以正常編譯帶 BOM 的 UTF-8 編碼的源文件,但生成的可執行文件的編碼是 Windows 本地字符集,比如 GBK2312。

也就是在可執行文件中,字符串“測試”是以 GBK2312 編碼的,而可執行程序執行到這條語句時,對這個字符串卻是以 UTF-8 解碼的,這樣就會出現亂碼。

解決方案之一:

在 pro 文件中添加:

win32:msvc{     QMAKE_CXXFLAGS += /source-charset:utf-8 /execution-charset:utf-8 }

按照文章提供的方法,很快解決了界面上的中文亂碼問題。

不過我還是有點不明白,之前創建 QT 應用程序沒有加這個選項,也沒有出現問題。為什么這個工程會出問題呢?

繼續查問題,我發現,在 QT 應用程序中鏈接 userlib32,如果不指定上面的編譯選項,就會出現亂碼問題。看來問題出在鏈接 Windows 庫上面,所以保險的方法就是加上編譯選項,強行指定源碼和可執行程序都使用 utf8 編碼。

最后,還有一點需要注意,如果調用第三方庫,在返回字符串的時候,可能不是采用的 utf8,這個時候需要顯式轉換編碼,否則也可能出現亂碼。

程序開發中經常會出現莫名其妙的問題,問題雖然小,但如果以前沒碰到過,解決起來也挺費時間的,所以在這里記錄一下,也許以后還會碰到類似的問題。

另外,解決問題時也不能過度依賴 GPT,這次就是查 GPT,而沒想著去網上搜索。

相關閱讀

主站蜘蛛池模板: 久久久久一区二区三区 | 欧美日韩精品 | 91在线电影 | 精品精品 | 在线视频一区二区三区 | 亚洲国产一区视频 | 蜜桃视频在线观看www社区 | 麻豆成人在线视频 | 久久国产精品亚洲 | 亚洲欧美日韩精品久久亚洲区 | 日本在线视频一区二区 | 亚洲欧美一区二区三区国产精品 | 黄网站涩免费蜜桃网站 | 91在线成人| 成人激情视频免费观看 | 日韩中文字幕在线观看 | 日韩免费一二三区 | 日韩欧美国产精品一区二区三区 | 天天久久 | 一区二区三区四区视频 | 久久里面有精品 | 中文久久 | 一区二区三区国产在线观看 | 亚洲一区二区三区四区五区午夜 | 日本在线中文 | 韩日精品视频 | 九九色九九 | 亚洲国产精品激情在线观看 | 日韩成人av在线播放 | 中文字幕日韩三级 | 天堂免费| 粉嫩一区二区三区四区公司1 | 男女爱爱福利视频 | 日韩在线视频网址 | 99久久婷婷国产综合精品电影 | 日韩视频免费 | 免费一级欧美在线观看视频 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 婷婷丁香综合网 | 91视频.| 欧美中文字幕一区二区三区亚洲 |