我一直在寻找char16_t
和char32_t
,因为我正在使用Unicode,而我在网上只能找到它们位于uchar.h
内。我在iOS SDK中找到了标头(出于某种原因而不是macOS),但是其中没有此类类型。虽然我在不同的标题中看到了它们,但是我找不到它们的定义位置。另外,互联网上的信息充其量是稀缺的,所以我有点在这里迷路了;但我确实读过wchar_t
不应用于Unicode,这正是我到目前为止所做的事情,因此请提供帮助:(
答案 0 :(得分:2)
require('source-map-support').install();
和char16_t
在C标准中指定。 (以下引用来自2018年标准)。
根据子句7.28,标头char32_t
将它们声明为无符号整数类型,分别用于16位和32位字符。您不必在任何其他标头中寻找它们; <uchar.h>
就足够了。
根据条款7.28,这些类型中的每一个都是最窄的无符号整数类型,具有所需的位数。 (例如,在仅支持8、18、24和36以及50位无符号整数的实现中,#include <uchar.h>
必须是18位大小;它不能是24位,而{{ 1}}必须是36。)
根据第6.4.5节,当字符串文字以uchar16_t
或uchar32_t
作为前缀时,例如u
或U
中,它是一个宽字符串文字,其中元素的类型分别为u"abc"
或U"abc"
。
根据第6.10.8.2节,如果C实现将预处理宏char16_t
定义为char32_t
,则表明__STDC_UTF_16__
的值是UTF-16编码的。类似地,1
表示char16_t
值是UTF-32编码的。在没有这些宏的情况下,不会对编码进行断言。
答案 1 :(得分:0)
Microsoft的描述很公道: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编码最简单。