Qt之Qstring注意事项

(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) /

 

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行者..................

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值