宽字符 (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中文网其他相关文章!