設置位置
專案屬性 → 配置屬性 → 一般 → 字符集:
- 使用 Unicode 字符集:定義
UNICODE、_UNICODE 宏。
- 使用多字節字符集:未定義上述宏。
- 未設置:同多字節。
實際影響:Windows API 映射
| API 原型 | Unicode (UNICODE=1) | 多字節 (MBCS) |
| CreateWindowEx | CreateWindowExW (LPWSTR) | CreateWindowExA (LPSTR) |
| MessageBox | MessageBoxW | MessageBoxA |
| lstrlen | lstrlenW | lstrlenA |
| TCHAR | wchar_t | char |
| _T("text") | L"text" | "text" |
代碼字符串類型與字符集的關系
- 專案設置 Unicode,**不影響**
std::string/char* 使用,它們始終是窄字符。
- 若調用 Windows API,**字符集決定映射到 W 版或 A 版**;若顯式調用
CreateWindowExA 則不受字符集影響。
std::wstring/wchar_t 對應 Unicode 建議類型。
最佳實踐
- 新專案選 Unicode:Windows 內核原生 Unicode,避免 ANSI→Unicode 轉換開銷,支援全字符集。
- 代碼中統一用 TCHAR/_T() 配合字符集宏,或直接用
std::wstring/wchar_t 明確 Unicode。
- 與第三方庫交互時**注意對方期望編碼,必要時用
WideCharToMultiByte/MultiByteToWideChar 轉換。
總結
專案字符集設置**僅控制 Windows API 宏映射(W/A 版本)及 TCHAR 定義**,不限制代碼中使用 std::string 或 std::wstring。現代 Windows 開發**強烈建議 Unicode**,並顯式使用寬字符類型而非依賴 TCHAR 宏。
- 上一篇文章: jQuery 文本框失去焦點為空時強制聚焦:blur 事件與 setTimeout 技巧
- 下一篇文章: Java 增強 for 循環編譯錯誤:數組初始化語法誤用
Copyright ©
程式碼之家 All Rights Reserved