QString 传递带中文的参数
编码了解
欧洲 ISO-8859 系列中使用最广泛的是 ISO-8859-1,就是我们常常听说的 Latin-1 编码 因为这个子集收录了欧洲绝大多数的常用字符。
中国 最初的 GB 编码是 GB2312,后来扩展成了 GBK,再后来继续扩展成了 GB18030。这样所有的标点符号、简体中文、少数名族语言、生僻字等都能表示了。
台湾 台湾是 BIG5,也就是繁体字编码。
全世界90%的国家都有了自己的编码方案,而当时 Windows 操作系统是主流操作系统,为了方便统一称呼,微软把这些非英语系的、兼容 ASCII 编码的、互相不兼容的字符编码统称为 “ANSI编码”
于是乎,统一的编码方案诞生了。当时有两个:Unicode 和 UCS。一山不容二虎,本来目的就是统一字符编码,所以当时制作这两个编码方案的人会互相进行整合对方的方案,所以到了 Unicode 2.0版本时两家的方案基本保持了一致。现在两种方案都在使用,只不过 Unicode 用的更加广泛。
参考:https://zhuanlan.zhihu.com/p/44991378
QString相关点
QString 类存储的字符串默认是 Unicode
来自 char* 的数据 - 默认被当作 UTF-8 编码格式 QString converts the const char * data into Unicode using the fromUtf8() function.
用 QChar 构建的 QString - 会进行深拷贝
作为参数传递带中文的参数
通过QString 不会出现问题
通过const char* 会出现问题 因为QString通过char*构造时默认当做UTF-8编码而不是Unicode
当通过const char* 传递带中文的参数时需要以下处理:
QTextCodec *code = QTextCodec::codecForName("GB2312");
QString str = code->toUnicode(argv[i]);
argv[i]:为 char*类型