如果C ++编译器支持Unicode字符集,那么实现的基本字符集是否也必须是Unicode?

时间:2015-11-09 17:17:51

标签: c++

考虑以下声明 -

COUT 如果在我的g ++ 4.8.2上编译,它会显示集成符号(Unicode字符)

1)。这是否意味着此实现的基本字符集也是Unicode?

如果是,请考虑以下声明 -

C ++以不同方式定义'byte'。一个C ++字节由足够的no组成。比特至少容纳总数。用于实现的基本字符集的字符。

2)。如果我的编译器支持Unicode,那么根据上面'byte'定义的字节中的no.of位必须大于8.因此,CHAR_BIT> 8,对吧?但我的编译器显示CHAR_BIT == 8.为什么?

参考:C ++ Primer Plus

P.S。我是初学者。不要把我扔进复杂的技术细节。保持简单直接。提前谢谢!

3 个答案:

答案 0 :(得分:2)

Unicode与您的编译器或C ++定义" byte"无关。不同。它只是将" byte"的概念分开。和#34;字符"在字符串级别和单独的字符串级别。

Unicode的多字节字符发挥作用的唯一时间是在显示期间和操作字符串时。另请参阅the difference between std::wstring and std::string以获取更多技术说明。

编译器只是编译。除了处理源代码之外,它并不关心你的字符集。

字节一如既往仅为8位。

答案 1 :(得分:1)

  

这是否意味着此实现的基本字符集也是Unicode?

不,没有这样的要求,并且char足以容纳任意Unicode字符的实现很少。

char足以容纳基本字符集的成员,但是不在基本字符集中的字符会发生什么情况。

在某些系统上,所有内容都可能转换为一个字符集,例如ISO8859-1,其字符数少于256个,因此完全符合char

在其他系统上,所有内容都可能被编码为UTF-8,这意味着单个逻辑字符可能会占用多个char值。

答案 2 :(得分:0)

许多编译器支持UTF-8,基本字符集为ASCII。在UTF-8中,Unicode代码点由1到4个字节组成,因此通常为1到4个字符。 UTF-8的设计使得大多数C和C ++都可以正常工作,而无需任何直接支持。请注意,例如strlen()返回的是字节数,而不是代码点的数量。但大多数时候你并不关心这一点。 (无论如何,像strncpy这样的函数在使用UTF-8时会变得稍微危险一些)。

当然忘记使用char来存储Unicode代码点。但是,一旦你进入更复杂的字符串处理,无论如何很多事情都无法在字符级别完成。