【发布时间】:2011-06-19 21:39:49
【问题描述】:
GCC 支持 -fshort-wchar 将 wchar_t 从 4 转换为两个字节。
在编译时检测 wchar_t 大小的最佳方法是什么,以便我可以将其正确映射到适当的 utf-16 或 utf-32 类型? 至少,在 c++0x 发布并为我们提供稳定的 utf16_t 和 utf_32_t 类型定义之前。
#if ?what_goes_here?
typedef wchar_t Utf32;
typedef unsigned short Utf16;
#else
typedef wchar_t Utf16;
typedef unsigned int Utf32;
#endif
【问题讨论】:
-
不要这样做。 wchar_t 与 unicode 无关。它是一种独特的类型,可以容纳所有支持的语言环境中最大扩展字符集的所有成员。如果您的平台仅支持 ASCII,则 sizeof(wchar_t) 可以为 1。这也意味着,例如,L'mötley crüe' 不一定 是一个 unicode 字符串 - 它也可以是一个拉丁文-1 使用 wchar_t 存储的字符串。
-
这是有史以来最普遍无益的评论。根据该建议,在 C++0x 普遍发布之前,我们不应该尝试处理 Utf 编码的字符串。同时,对于我支持的平台,我需要一组 typedef,映射到可以保存所需数据的最合适的不同类型。