Henkk

导航

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*类型

 

posted on 2023-03-03 11:13  Henkk  阅读(116)  评论(0编辑  收藏  举报