原始碼檔案的編碼格式(UTF-8 或 ANSI)在不同作業系統下對編譯結果的影響截然不同,這是跨平台開發常遇到的坑。
| 平台 | UTF-8 原始碼 | ANSI 原始碼 |
|---|---|---|
| Windows | 中文顯示正常 | 中文顯示正常 |
| Linux | 中文顯示正常 | 中文亂碼 |
使用 Source Insight 3.5 開啟專案時發現中文顯示亂碼,但 Notepad 開啟正常。經 UltraEdit 與 Beyond Compare 驗證,原檔案為 UTF-8 編碼,另存為 ANSI 後 Source Insight 即可正常顯示。這說明舊版 Source Insight 不支援 UTF-8 中文顯示。
測試程式碼使用 QString::fromLocal8Bit 處理中文字串:
QPushButton hello(QString::fromLocal8Bit("世界您好!"));
ANSI 與 UTF-8 兩種編碼的源檔在 Windows 下編譯執行皆正常,二進位比較發現 UTF-8 版每個漢字多佔 1 位元組。但在 Linux 下編譯,UTF-8 版正常,ANSI 版亂碼。
add_compile_options(-finput-charset=UTF-8) (GCC) 或 /source-charset:utf-8 (MSVC)。QString::fromUtf8、tr() 或外部資源檔(.ts/.qm)管理多語言文字。