Rod*_*ier 4 c unicode macos constants clang
我一直在寻找char16_tand char32_t,因为我正在使用 Unicode,而我在网上能找到的只是它们在里面uchar.h。我在 iOS SDK(不是 macOS 的,出于某种原因)中发现了上述标题,但其中没有这样的类型。不过,我在不同的标题中看到了它们,但是我找不到它们的定义位置。此外,互联网上的信息充其量是稀缺的,所以我有点迷失在这里;但我确实读过wchar_t不应该用于Unicode,这正是我到目前为止所做的,所以请帮助:(
char16_t并char32_t在 C 标准中指定。(以下引文来自 2018 年标准。)
根据第 7.28 条,标头将<uchar.h>它们声明为分别用于 16 位和 32 位字符的无符号整数类型。您不必在任何其他标题中寻找它们;#include <uchar.h>应该足够了。
同样根据第 7.28 条,这些类型中的每一种都是具有所需位数的最窄无符号整数类型。(例如,在仅支持 8、18、24、36 和 50 位无符号整数的实现中,char16_t大小必须为 18 位;不能为 24,而char32_t必须为 36。)
根据第 6.4.5 条,当字符串文字以uor为前缀时U,如在u"abc"or 中U"abc",它是一个宽字符串文字,其中元素分别具有类型char16_tor char32_t。
根据第 6.10.8.2 条,如果 C 实现将预处理器宏定义__STDC_UTF_16__为1,则表示char16_t值是 UTF-16 编码的。同样,__STDC_UTF_32__表示char32_t值是 UTF-32 编码的。在没有这些宏的情况下,不会对编码做出任何断言。
微软有一个公平的描述:https://learn.microsoft.com/en-us/cpp/cpp/char-wchar-t-char16-t-char32-t ?view=vs-2017
char 是原始的、通常是 8 位的字符表示形式。
wchar 是 Windows 使用的 16 位“宽字符”。Microsoft 是 Unicode 的早期采用者,不幸的是,这使他们只能使用这种仅在 Windows 上使用的编码。
char16 和 char32,用于 UTF-16 和 -32
大多数非 Windows 系统使用 UTF-8 进行编码(甚至 Windows 10 也采用这种方式,https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows#UTF-8)。UTF-8 是目前网络上最常用的编码。(参考: https: //en.wikipedia.org/wiki/UTF-8)
UTF-8 存储在一系列字符中。UTF-8 可能是您最容易采用的编码,具体取决于您的操作系统。