寬字符(wchar_t) 和寬字符串(wstring) 在C 社區中引起了批評,特別是因為它們在Windows API 中使用。本文探討了這些概念的缺點,並探討了國際化的替代方法。
wchar_t 旨在表示所有語言環境中的字元代碼,提供代碼之間的一對一映射單位和字元。然而,它的規範假定字元和代碼點之間存在直接關係,而 Unicode 違反了這一點。這種差異使得使用 wchar_t 作為通用文字表示或簡化文字演算法變得不切實際。
對於可移植程式碼,wchar_t 的用途有限。 __STDC_ISO_10646__ 的存在表示到 Unicode 代碼點的直接映射,但不能跨平台一致地依賴它。例如,Windows 使用 UTF-16 作為其 wchar_t 編碼,從而引入了額外的複雜性。
UTF-8 編碼的 C 字串:
此替代方案提供便攜式文字表示並避免寬字元的複雜性。大多數現代平臺本身就採用 UTF-8,雖然缺乏簡單的文字演算法支持,但它有助於錯誤檢測和修正。
跨平台表示:
某些軟體使用自訂表示就像UTF-16 編碼的無符號短數組一樣,假設有必要的庫支援和語言
C 11 寬字元:
C 11 引入char16_t 和char32_t 作為 wchar_t 的替代品。雖然沒有明確保證分別表示 UTF-16 和 UTF-32,但主要實現很可能會遵守此約定。改進的 UTF-8 支援(包括 UTF-8 字串文字)進一步增強了 C 11 對於國際化應用程式的實用性。
TCHAR:
TCHAR 主要用於遷移舊版Windows 程序,不可移植,其編碼和資料類型缺乏特異性,並且在外部沒有任何價值。基於 TCHAR 的 API。
總之,wchar_t 和 wstrings 由於其非通用適用性,為跨平台國際化工作帶來了挑戰。討論的替代方案為處理國際化文本提供了更通用和可移植的解決方案。
以上是為什麼 C 的 `wchar_t` 和 `wstring` 被認為有國際化問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!