如何输出捕获为命令行参数子串的unicode字符?

时间:2016-07-08 16:59:14

标签: c++ c++11 unicode

我对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,如何在单个参数向量中访问单个字符?必须存在一些我不知道的类型冲突。

1 个答案:

答案 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