我正在读书wchar_t在一般编程中有什么用? https://stackoverflow.com/questions/13509733/并在接受的答案中发现一些令人困惑的事情:
更常见的是使用 char 进行可变宽度编码,例如UTF-8 或 GB 18030。
我从我的教科书中找到了这一点:
UTF-8的Unicode编码不是最多4个字节吗?char
对于大多数平台来说是 1 个字节。我是否误解了什么?
更新:
经过搜索和阅读,现在我知道:
- 代码点和代码单元是不同的东西。代码点是唯一的,而代码单元依赖于编码。
- u8'a'(这里是一个字符,不是字符串)只允许用于基本字符集(ASCII及其控制字符),其值是相应的'a'的代码单元值,对于ascii字符,代码单位与代码点的值相同。 (这是什么@codekaizer的回答说)
-
std::string::size()
返回代码单元。
所以编辑们都在处理代码单元正确的?如果我将文件编码从 utf8 更改为 uft32,则大小ə
将会4?
utf8的unicode编码不是最多4个字节吗?
As per lex.ccon/3 https://timsong-cpp.github.io/cppwp/lex.ccon#3, 强调我的:
以 u8 开头的字符文字,例如 u8'w',是一个字符
char 类型的文字,称为 UTF-8 字符文字。的价值
UTF-8 字符文字等于其 ISO 10646 代码点值,
前提是代码点值可以用单身的
UTF-8 编码单元(也就是说,只要它位于 C0 控件和基本
拉丁 Unicode 块)。如果该值无法用单个
UTF-8编码单元,程序为不规范的。 UTF-8 字符文字
包含多个 c 字符是不规范的.
单个UTF-8编码单元为1字节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)