为什么C++的char类型字符数组可正常处理Unicode字符且不报错?
解答
你对 char 类型的适用范围存在误解,它本质是 C++ 中的单字节整数类型,从来没有被限定只能存储 ASCII 字符,出现你描述的现象完全符合 C++ 的语法规则和运行逻辑:
- 编译阶段,编译器会按照你指定的源文件编码(默认和源文件本身的保存编码一致,目前大多环境默认是 UTF-8),把字符串字面量
"γεια σας"转换为对应的多字节序列,希腊语字符在 UTF-8 编码下大多占2字节,这些拆分后的单字节值会依次存入char x[]数组的对应位置,整个过程完全符合语法,编译器当然不会报错。 - 运行阶段,
cout输出char数组时只会把数组存储的字节原样输出到标准输出流,只要你运行程序的终端编码和源文件编码匹配,终端就会把连续的多字节序列解析为对应的希腊语字符展示,所以你能得到预期的输出结果。 - 额外补充:如果你的源文件编码和终端编码不匹配,运行后大概率会输出乱码,你当前能得到正确结果只是因为整个环境的编码刚好是一致的。
内容的提问来源于stack exchange,提问作者Mohammd Omar
相关产品推荐
相关产品推荐

