(1)QString 类存储的字符串中的字符默认采用的是Unicode 编码比如有如下代码:QString str = "你好";
str 变量中存储的数据采用的是 Unicode 编码格式,接收方如果解析成乱码,就要想想两方的编码格式采用的是否都是 Unicode。
如果不是,就需要用 QTextCodec 类来执行转码操作。
(2)来自 char*的数据,默认被当作 UTF-8 编码格式最常用的就是传入一个const char* (字符串常量) ,例如:QString str = "hello";
Qt 默认将来自 char*的字符串视为 UTF-8 编码格式,因此在转换过程中会在内部自动调用fromUtf8()函数进行 char*→QString 的转换。
(3)用QChar数组构建的QString类对象会进行深度复制因为Unicode编码格式是用双字节存储一个字符,所以QString类中存储着一个个的16位QChar字符(16位即为2个字节, 16 bits=2 bytes) ,每个QChar字符对应着一个Unicode4.0 字符。
如果字符的编码大于 65536,就要用两个 QChar 存储这个字符。
例如:static const QChar data[4] = (0x0055, 0x006e, 0x10e3, 0x03a3);
QString str(data,4);
用QChar数组来构建QString类对象是采用深度复制(Deep Copy)的方式,意思就是说QString 类对象会完整复制一份 QChar 数组的数据。
QString类对象复制QChar的数据时采用深度复制,意味着增加了系统开销。
如果不想如此,则可以使用fromRawData()函数,该函数的原型声明如下:QString QString::fromRawData(const QChar *unicode, int size);
参数unicode用于构造字符串的QChar数组,并不会进行复制;
size表示在unicode中从左开始截取的长度。
下列代码演示 fromRawData()函数的使用:QRegularExpression pattern("\u00A4") ;
static const QChar unicode[] = (0×005A, 0×007F, 0×00A4, 0×0060,0x1009, 0×0020,0×0020);
int size = sizeof(unicode) / sizeof(QChar);
QString str = QString::fromRawData(unicode, size);
if (str.contains(pattern) /
09-04
1707
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountBlack.png)
09-15
2139
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountBlack.png)