考虑以下声明 -
COUT 如果在我的g ++ 4.8.2上编译,它会显示集成符号(Unicode字符)
1)。这是否意味着此实现的基本字符集也是Unicode? p>
如果是,请考虑以下声明 -
C ++以不同方式定义'byte'。一个C ++字节由足够的no组成。比特至少容纳总数。用于实现的基本字符集的字符。
2)。如果我的编译器支持Unicode,那么根据上面'byte'定义的字节中的no.of位必须大于8.因此,CHAR_BIT> 8,对吧?但我的编译器显示CHAR_BIT == 8.为什么?
参考:C ++ Primer Plus
P.S。我是初学者。不要把我扔进复杂的技术细节。保持简单直接。提前谢谢!
答案 0 :(得分:2)
Unicode与您的编译器或C ++定义" byte"无关。不同。它只是将" byte"的概念分开。和#34;字符"在字符串级别和单独的字符串级别。
Unicode的多字节字符发挥作用的唯一时间是在显示期间和操作字符串时。另请参阅the difference between std::wstring
and std::string
以获取更多技术说明。
编译器只是编译。除了处理源代码之外,它并不关心你的字符集。
字节一如既往仅为8位。
答案 1 :(得分:1)
这是否意味着此实现的基本字符集也是Unicode? p>
不,没有这样的要求,并且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代码点。但是,一旦你进入更复杂的字符串处理,无论如何很多事情都无法在字符级别完成。