当前位置:网站首页>QT 如何计算中英文字符串的长度
QT 如何计算中英文字符串的长度
2022-07-29 18:19:00 【hellokandy】
日常开发中,可能都会用到统计字符串长度,如果是英文和数字,一般情况计算出来的长度是正确的。但是,遇到中英文混合的情况,如果还是用之前的统计方式,得到的结果往往是不准确的!
在QT帮助文档中,我们可以找到关于QString用来计算字符个数的函数:length()
int QString::length() const
Returns the number of characters in this string. Equivalent to size().
如果直接使用 length() 来计算字符串长度,在遇到中英文混合的字符串时,就会抓瞎!那么准确计算中英文字符串长度的代码是什么样的呢?
正确计算中英文字符串长度的代码
#include <QtCore/QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int length = 0;
QString qstrEN = "hello,world!";
length = qstrEN.length();//12
qDebug() << "qstrEN.length()=" << length;
QString qstrZH = "好好学习,天天向上!";
length = qstrZH.length();//16?
qDebug() << "qstrZH.length()=" << length;
qstrZH = QString::fromLocal8Bit("好好学习,天天向上!");
length = qstrZH.toLocal8Bit().length();//20,OK!
qDebug() << "qstrZH.length()=" << length;
QString qstrMisc = QString::fromLocal8Bit("Good Good Study!天天向上!");
length = qstrMisc.length();//21
qDebug() << "qstrMisc.length()=" << length;
length = qstrMisc.toLocal8Bit().length();//26,OK!
qDebug() << "qstrMisc.length()=" << length;
//字符串截取
QByteArray bytestr = qstrMisc.toLocal8Bit().left(20);
qDebug() << "bytestr=" << bytestr;//"Good Good Study!\xCC\xEC\xCC\xEC"
QString localstr = QString::fromLocal8Bit(bytestr);
qDebug() << "localstr=" << localstr;//"Good Good Study!天天"
return 0;
}
输出结果:
qstrEN.length()= 12
qstrZH.length()= 16
qstrZH.length()= 20
qstrMisc.length()= 21
qstrMisc.length()= 26
bytestr= "Good Good Study!\xCC\xEC\xCC\xEC"
localstr= "Good Good Study!天天"
可以看到,在遇到中文或者中英文混合的字符串时,我们必须先通过 toLocal8Bit() 转为本地操作系统设置的字符集编码,然后再使用 length() 计算,才能得到正确的结果!
边栏推荐
猜你喜欢
随机推荐
Network Effects in Web3
实现get/post请求调用第三方接口
Web APIs DOM- 网页特效篇 综合案例
牛客网刷题记录 || 指针
【QT】Qt获取前几天/后几天的时间
AI 通过了图灵测试,科学家反应冷淡:“很棒,但没必要”
【7.23-7.29】博客精彩回顾
Google Cloud X Kyligence|如何从业务视角管理数据湖?
R语言使用zoo包表示时间序列数据(time series data)
11.99万起,东风风行游艇上市,产品力越级诚意满满
MySQL 中的反斜杠 \\,我上当了
The backslash \\ in MySQL is really a pit
三轮电摩专用之48V动力锂电池组-产品规格书
[Deep Learning] YOLO to VOC VOC to YOLO
kubernetes之资源限制及QOS服务质量
scroll bar style
疫情之下,逆势成长的平板市场,究竟会不会是昙花一现?
深投控收购意大利半导体设备商被叫停
不惧AMD及Arm挑战,英特尔称霸服务器市场的秘诀是什么?
Security整各Gateway后配置不生效?








