[英]What exactly are char16_t and char32_t, and where can I find them?
我一直在尋找char16_t
和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 條,這些類型中的每一種都是具有所需位數的最窄無符號整數類型。 (例如,在僅支持char16_t
和 50 位無符號整數的實現上, char16_t
必須是 18 位大小;它不能是 24,而char32_t
必須是 36 .)
根據第 6.4.5 條,當字符串文字以u
或U
為前綴時,如u"abc"
或U"abc"
,它是一個寬字符串文字,其中元素的類型分別為char16_t
或char32_t
。
根據條款 6.10.8.2,如果 C 實現將預處理器宏__STDC_UTF_16__
定義為1
,則表示char16_t
值是 UTF-16 編碼的。 類似地, __STDC_UTF_32__
表示char32_t
值是 UTF-32 編碼的。 在沒有這些宏的情況下,不會對編碼做出任何斷言。
微軟有一個公平的描述: https : //docs.microsoft.com/en-us/cpp/cpp/char-wchar-t-char16-t-char32-t?view=vs-2017
char 是原始的,通常是 8 位的字符表示。
wchar 是 Windows 使用的“寬字符”,16 位。 微軟是 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 可能是您會發現最容易采用的編碼,具體取決於您的操作系統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.