【问题标题】:Use a Unicode character in a char variable (C++)在 char 变量中使用 Unicode 字符 (C++)
【发布时间】:2022-01-10 03:18:40
【问题描述】:

我从命令行获得了一些输入并希望支持 Unicode。

这是我的错误:

这是我的示例代码:


#include <iostream>

int main() {
  char test = '█';
} 

// Characters wanted: █, ▓, or ▒

如何让我的程序支持 Unicode?​​p>

【问题讨论】:

  • Char 只包含一位。试试宽字符和 wcout。
  • 仅在 UTF-8 格式的字符串中使用 Unicode。像 wchar 这样的类型没有多大帮助,因为 Unicode 字符可以是多个代码点。 ??????‍??????‍????‍????????????????????????????????????????????? ??‍??????????‍????‍??????‍????
  • wchar_t 适用于 Unicode,只要您考虑到 wchar_t 在不同平台上的大小不同(Windows 上为 16 位,其他平台上为 32 位),因此请使用 @987654326 @ 而不是单个 wchar_t,因此您可以考虑可能需要多个 wchar_ts 来编码单个 Unicode 代码点,以及需要多个代码点来编码单个 Unicode 字素。

标签: c++ unicode


【解决方案1】:

char 通常只有 1 个字节,这意味着它无法存储大多数 Unicode 字符。您应该考虑使用wchar_t,它需要足够大以容纳任何受支持的字符代码点。关联的 char 文字如下所示:L'█'

【讨论】:

  • L'?‍?‍?‍?'呢?
  • ?‍?‍?‍? 不是单个代码点,而是 8 个代码点构成了您的浏览器可能显示为一个表情符号的内容,因此它不能以字符类型存储,必须存储在一个字符串中。
  • "wchar_t ... 需要足够大以容纳任何支持的字符代码点" - 在 Windows 上并非如此,wchar_t 仅16 位,因此它不能保存 Unicode 代码点 > U+FFFF,但它可以保存 UTF-16 代码单元,这就是为什么 Windows 上的 Unicode wchar_t 字符串以 UTF-16(以前是 UCS-2)编码的原因,而其他平台可以使用 UTF-32 编码 wchar_t 字符串。
  • A char is usually only 1 byte char 始终是 1 个字节。
  • 这取决于您使用的定义,根据标准,一个字节被定义为addressable unit of data storage large enough to hold any member of the basic character set of the execution environment,一个字符被定义为single-byte character &lt;C&gt; bit representation that fits in a byte。但是,一个字节的通用定义将其定义为包含8位,不一定等同于标准中的定义。
猜你喜欢
  • 2017-07-08
  • 2013-05-05
  • 2012-08-14
  • 1970-01-01
  • 2020-03-10
  • 2023-04-06
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多