相关疑难解决方法(0)

C ++ 20的“ char8_t”与旧的“ char”相同吗?

在CPP参考文档中

我注意到了 char

字符类型足够大,可以表示任何UTF-8八位代码单元(自C ++ 14起)

和为 char8_t

UTF-8字符表示形式的类型,必须足够大以表示任何UTF-8代码单元(8位)

这是否意味着两者是同一类型?还是char8_t有其他功能?

c++ c++14 c++20

31
推荐指数
2
解决办法
2228
查看次数

C++17 之前的 char8_t / UTF8 字符的情况和糟糕的人设?

我一直在阅读链接作为这个问题,当然这个问题是关于char8_t在 C++20 中为即将到来的“utf8”字符类型及其相应的字符串类型做准备的问题,并且可以说,在某种程度上,是时候了。还有就是一团糟。

请随时纠正我的错误:

  • C++,任何标准,都无法指定源代码具有给定的文本编码(类似于 Python 的# encoding:...元数据),也无法将其编译成什么标准(如 say #!/bin/env g++ -std=c++14)。
  • 在 C++11 之前,也没有办法指定任何给定的字符串文字将具有给定的编码 - 编译器可以自由地将 UTF8 字符串文字重新解析为 UTF16 甚至 EBCDIC,如果需要的话。
  • C++11 引入了u16"text"u32"text"相关的 char 类型来生成 UTF16 和 UTF32 编码的文本,但没有提供字符串或流工具来处理它们,所以它们基本上没用。
  • C++11引入了u8"text"用于生成 UTF8 编码的字符串......但它甚至没有引入正确的 UTF8 字符类型或字符串类型(这char8_t就是 C++20 中的意图?),所以它甚至比以上。
  • 因为这一切的时候char8_t终于出台,它杀死很多原打算是有效的,到目前为止,一些调控措施的要求包括代码完全禁用char8_t行为
  • 即便如此,也没有现成的工具(例如:与 不同的垃圾层接口<random>)来检查、转换(在同一字符串内)或转换(跨字符串类型复制)C++ 中的文本编码。甚至 codecvt 似乎也已被删除。

鉴于上述所有情况,我有一些关于为什么我们处于这种奇怪状态以及它是否会变得更好的问题。从历史上看,Unicode 支持一直是 C++ 的最低点之一。

同样,我想知道整个概念的穷人模拟有多大用处(免责声明:我是cxxomfort …

c++ utf-8 char

4
推荐指数
1
解决办法
460
查看次数

标签 统计

c++ ×2

c++14 ×1

c++20 ×1

char ×1

utf-8 ×1