我对C ++字符串中的unicode字符感到困惑。
我有一个这样的程序:
#include <iostream>
int main(int argc, char* argv[])
{
std::cout << "3rd char of " << argv[1] << "is: " << argv[1][2] << std::endl;
}
当我使用此命令运行它时:
mapper abͲ
它返回:
3rd character of abͲis: �
现在,显然我的系统支持unicode(Ubuntu 16.04),编译器不介意程序(g ++ 5.3.1)。我理解argv是char *对象的向量,但是如果字符是unicode,如何在单个参数向量中访问单个字符?必须存在一些我不知道的类型冲突。
答案 0 :(得分:3)
在C ++中处理文本时要记住的最重要的事情是一个char
不等同于一个字符。对于像ASCII这样的单字节字符编码,char
==一个字符,但对于像UTF-8这样的多字节编码,字符可以由多个char
组成。
在这种情况下,您尝试输出的字符(U + 0372 GREEK CAPITAL LETTER ARCHAIC SAMPI)不适合单char
。它的实际值将取决于您的系统文本编码,因为它已传递到argv
。 Ubuntu 16.04上的默认编码是UTF-8,因此该字符将是两个字节0xCD 0xB2
。