如何输出捕获为命令行参数子字符串的 unicode 字符
How do I output unicode character captured as a substring of command line argument?
我对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
。
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 使用 C++ 将命令行参数拆分为参数/向量
- 如何在OMNET++中添加专门的命令行参数?
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 是否可以在命令行中将输入参数传递给可执行文件
- 命令行参数,cant 或两个变量
- 在 Windows 中使用 boost::p rogram_options 从命令行参数读取 Unicode 字符
- 如何在 Android/NDK 上将命令行参数从 gradlew.bat 传递到 Clang
- 编写一个将 LLVM IR 文件作为命令行参数的程序
- 通过命令行参数获取llvm ir文件时面临问题
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 从命令行获取参数时出现问题
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 命令行参数在不到 3 个 LOC 中 int?
- 在命令行参数中使用引号
- 使用参数 + stdout + stderr 从命令行调用 MFC 应用程序
- 在VS2013中使用devenv (C++)传递命令行参数argv
- 二进制数据作为命令行参数