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

How do I output unicode character captured as a substring of command line argument?

本文关键字:参数 命令行 字符串 字符 unicode 何输出 输出      更新时间:2023-10-16

我对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,我如何访问单个参数向量中的单个字符?我一定缺少某种类型冲突。

在处理

C++中的文本时要记住的最重要的事情是,一个char不等同于一个字符。 对于像 ASCII 这样的单字节字符编码,一个char == 一个字符,但对于像 UTF-8 这样的多字节编码,一个字符可以由多个char组成。

在这种情况下,您尝试输出的字符(U+0372 希腊大写字母古桑皮)不适合单个char。 它的实际值将取决于您的系统文本编码,因为它已传递到 argv 中。 Ubuntu 16.04 上的默认编码是 UTF-8,因此该字符将是两个字节0xCD 0xB2