簡體   English   中英

char16_t 和 char32_t 到底是什么,我在哪里可以找到它們?

[英]What exactly are char16_t and char32_t, and where can I find them?

我一直在尋找char16_tchar32_t ,因為我正在使用 Unicode,而我在網上能找到的只是它們在uchar.h 我在 iOS SDK(不是 macOS 的,出於某種原因)中發現了上述標題,但其中沒有這樣的類型。 不過,我在不同的標題中看到了它們,但是我找不到它們的定義位置。 此外,互聯網上的信息充其量是稀缺的,所以我有點迷失在這里; 但我確實讀過wchar_t不應該用於 Unicode,這正是我到目前為止所做的,所以請幫助:(

char16_tchar32_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 條,當字符串文字以uU為前綴時,如u"abc"U"abc" ,它是一個寬字符串文字,其中元素的類型分別為char16_tchar32_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM