She*_*don 3 c++ utf-8 utf emoji c++20
我刚刚听说 的存在char8_t,char16_t并且char32_t正在测试它。当我尝试编译下面的代码时,g++抛出以下错误:
error: use of deleted function \xe2\x80\x98std::basic_ostream<char, _Traits>& std::operator<<(basic_ostream<char, _Traits>&, char32_t) [with _Traits = char_traits<char>]\xe2\x80\x99\n 6 | std::cout << U\'\' << std::endl;\n | ^~~~~\nRun Code Online (Sandbox Code Playgroud)\nerror: use of deleted function \xe2\x80\x98std::basic_ostream<char, _Traits>& std::operator<<(basic_ostream<char, _Traits>&, char32_t) [with _Traits = char_traits<char>]\xe2\x80\x99\n 6 | std::cout << U\'\' << std::endl;\n | ^~~~~\nRun Code Online (Sandbox Code Playgroud)\n另外,为什么我不能将表情符号放入char8_t或char16_t?例如,以下代码行不起作用:
#include <iostream>\n\nint main() {\n char32_t c = U\'\';\n\n std::cout << c << std::endl;\n\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n根据我的理解,表情符号是 UTF-8 字符,因此应该适合char8_t.
表情符号是 UTF-8 字符
不存在“UTF-8 字符”这样的东西。
有 Unicode 代码点。这些可以用 UTF-8 编码来表示,以便每个代码点映射到一个或多个 UTF-8 代码单元的序列char8_t:但这意味着大多数代码点映射到多个char8_ts:又名字符串。而且表情符号并不属于映射到单个 UTF-8 代码单元的 127 个代码点。
特别是表情符号可以由多个代码点构建,因此即使使用 UTF-32,您也不能保证任何表情符号都可以存储在单个char32_t代码点中。
最好始终将这些内容视为字符串,而不是字符。忘记“角色”的存在。