现代 C 字符串编码

本文更新至 C23。

字符类型

  • signed char:有符号 8 位字符类型。
  • unsigned char:无符号 8 位字符类型。通常也用作底层内存结构的 byte 表达。
  • char:8 位字符类型。与 int 类型族的常规不同,charsigned char 是不同的类型。与 signed charunsigned char 性质相同。
  • wchar_t:位宽足以表示任何宽字符的字符类型。通常为 16 位无符号整型。
  • char8_t:(C23 起)8 位无符号字符类型。表示一个 UTF-8 的编码。
  • char16_t:(C11 起)16 位无符号字符类型。
  • char32_t:(C11 起)32 位无符号字符类型。

与 C++ 不同, wchar_tchar8_tchar16_tchar32_t 不是关键字,而通常是 typedef。

字符串类型

字符串字面量可使用以下前缀:

  • L:通常是 UTF-16 编码,字符类型为 wchar_t。如 L"是我"(wchar_t[]){ 0x662f, 0x6211, 0 }
  • u8:(C11 起)UTF-8 字符串,字符类型为 char,或 C23 起 char8_t。如 u8"是我"(char8_t[]){ 0xe6, 0x98, 0xaf, 0xe6, 0x88, 0x91, 0 }
  • u:(C11 起)16 位宽字符串,通常(或 C23 起必然)是 UTF-16 编码,字符类型为 char16_t。如 u"是我"(char16_t[]){ 0x662f, 0x6211, 0 }
  • U:(C11 起)32 位宽字符串,通常(或 C23 起必然)是 UTF-32 编码,字符类型为 char32_t。如 U"是我"(char32_t[]){ 0x0000662f, 0x00006211, 0 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容