究竟是什么char16_t和char32_t,我在哪里可以找到它们?

问题描述 投票:1回答:2

我正在寻找char16_tchar32_t,因为我正在使用Unicode,而我在网上找到的只是他们在uchar.h里面。我在iOS SDK中找到了所谓的标题(由于某种原因,不是macOS标题),但是它没有这样的类型。不过,我在不同的标题中看到了它们,但我找不到它们的定义。此外,互联网上的信息充其量是稀缺的,所以我有点迷失在这里;但我确实读过wchar_t不应该用于Unicode,这正是我到目前为止所做的,所以请帮助:(

c macos unicode clang constants
2个回答
2
投票

char16_tchar32_t在C标准中规定。 (以下引文来自2018年的标准。)

根据第7.28节,标头<uchar.h>将它们声明为无符号整数类型,分别用于16位和32位字符。你不应该在任何其他标题中寻找它们; #include <uchar.h>应该足够了。

同样根据第7.28节,这些类型中的每一种都是具有所需位数的最窄无符号整数类型。 (例如,在仅支持8,18,24和36以及50位的无符号整数的实现上,uchar16_t必须是18位大小;它不能是24,uchar32_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编码的。在没有这些宏的情况下,没有关于编码的断言。


0
投票

微软有一个公平的描述:https://docs.microsoft.com/en-us/cpp/cpp/char-wchar-t-char16-t-char32-t?view=vs-2017

  • char是原始的,通常是8位字符表示。
  • wchar是一个16位的“宽字符”,由Windows使用。微软是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可能是您最容易采用的编码,具体取决于您的操作系统。

© www.soinside.com 2019 - 2024. All rights reserved.