wchar_t
只是一个完整的文字。它有最小值、最大值等。
它的尺寸没有由标准固定。
如果足够大,您可以将 UCS-2 或 UCS-4 数据存储在以下缓冲区中wchar_t
。无论您使用什么系统,都是如此,因为 UCS-2 和 UCS-4 以及 UTF-16 和 UTF-32 只是按序列排列的整数值的描述。
在C++11中,有std
假设数据具有这些编码,则读取或写入数据的 API。在 C++03 中,存在使用当前语言环境读取或写入数据的 API。
22.5 标准代码转换方面 [locale.stdcvt]
3 对于三个代码转换方面 codecvt_utf8、codecvt_utf16 和 codecvt_utf8_utf16 中的每一个:
(3.1) — Elem 是宽字符类型,例如 wchar_t、char16_t 或 char32_t。
4 对于方面 codecvt_utf8:
(4.1) — 方面应在程序内的 UTF-8 多字节序列和 UCS2 或 UCS4(取决于 Elem 的大小)之间进行转换。
所以在这里codecvt_utf8_utf16
处理utf8
一侧为 UCS2 或 UCS4(取决于 Elem 的大小),另一侧为 UCS2 或 UCS4。它进行转换。
Elem(宽字符)被假定为 UCS2 或 UCS4 编码,具体取决于它的大小。
这并不意味着wchar_t
是这样编码的,它只是意味着这个操作解释了wchar_t
被如此编码.
UCS2 或 UCS4 如何进入 Elem 并不是这部分标准所关心的。也许你用十六进制常量将其设置在那里。也许你是从 io 上读到的。也许你是即时计算出来的。也许您使用了高质量的随机数生成器。也许您将一个的位值加在一起ascii
细绳。也许您计算了一个定点近似值log*
月球将地球日改变 1 秒所需的秒数。不是这些段落的问题。这些段落只是规定了如何修改和解释位。
类似的主张在其他情况下也成立。这并不强制要求什么格式wchar_t
有。它只是说明了这些方面如何解释wchar_t
or char16_t
or char32_t
or char8_t
(阅读或写作)。
其他互动方式wchar_t
使用不同的方法来规定值的大小wchar_t
被解释。
iswalpha http://en.cppreference.com/w/cpp/string/wide/iswalpha使用(全局)区域设置来解释wchar_t
, 例如。在一些当地人看来,wchar_t
可能是UCS2。在其他情况下,它可能是一些疯狂的邪神编码,其细节使您能够从太空中看到新的颜色。
明确地说:编码不是数据或位的属性。编码是以下属性数据解释。很多时候只有一个proper or 合理的对数据进行任何有意义的解释,但数据本身就是位。
C++ 标准不强制要求存储在 a 中的内容wchar_t
。它确实规定了某些操作对内容的解释wchar_t
成为。该部分描述了某些方面如何解释数据wchar_t
.