首页 > 解决方案 > 为什么 u8'A' 可以是 char 类型,而 UTF-8 最多可以是 4 个字节,而 char 通常是 1 个字节?

问题描述

我在读wchar_t 在一般编程中有什么用?并在接受的答案中发现了一些令人困惑的地方:

使用可变宽度编码的 char 更为常见,例如 UTF-8 或 GB 18030。

我从我的教科书中找到了这个:

图片

UTF-8的Unicode编码不是最多4个字节吗?char对于大多数平台来说是 1 个字节。我误解了什么吗?


更新:

经过搜索和阅读,现在我知道了:

  1. 代码点和代码单元是不同的东西。代码点是唯一的,而代码单元依赖于编码。
  2. u8'a'(a char, not string) 只允许用于基本字符集(ASCII 和它的控制字符的东西),它的值是对应的 'a' 的代码单元值,对于 ascii 字符,代码单位与代码点的值相同。(这就是@codekaizer的回答所说的)
  3. std::string::size()返回代码单元。

所以编辑们都在处理代码单元,对吧?如果我将文件编码从 utf8 更改为 uft32,那么 size ofə会是4吗?

标签: c++

解决方案


utf8的unicode编码不是最多4个字节吗?

根据lex.ccon/3强调我的

以 u8 开头的字符文字,例如 u8'w',是 char 类型的字符文字,称为 UTF-8 字符文字。UTF-8 字符文字的值等于其 ISO 10646 代码点值,前提是代码点值可以用单个 UTF-8 代码单元表示(也就是说,只要它在 C0 控件和基本拉丁 Unicode 中堵塞)。如果该值不能用单个 UTF-8 代码单元表示,则程序是ill-formed。包含多个 c 字符的 UTF-8 字符文字是ill-formed

单个 UTF-8 代码单元为 1 个字节。


推荐阅读