QT 如何计算中英文字符串的长度
日常开发中,可能都会用到统计字符串长度,如果是英文和数字,一般情况计算出来的长度是正确的。但是,遇到中英文混合的情况,如果还是用之前的统计方式,得到的结果往往是不准确的!
用户心里预期
我们在一些网站上填写信息时,一般都会有字符个数的提示,对于用户而言,只要输入的都算字符,别管中文字符英文字符占多少个字节,那是你们程序员的事情!那么我们先共识一下用户的心里预期:
abc123,这个是6个字符
我是中国人,这也是6个字符
abc123我是中国人,这是12个字符
在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();//12qDebug() << "qstrEN.length()=" << length;QString qstrZH = "好好学习,天天向上!";length = qstrZH.length();//16?qDebug() << "qstrZH.length()=" << length;qstrZH = QString::fromLocal8Bit("好好学习,天天向上!");length = qstrZH.length();//10,OK!qDebug() << "qstrZH.length()=" << length;QString qstrMisc = QString::fromLocal8Bit("Good Good Study!天天向上!");length = qstrMisc.toLocal8Bit().length();//26qDebug() << "qstrMisc.length()=" << length;length = qstrMisc.length();//21,OK!qDebug() << "qstrMisc.length()=" << length;//字符串截取QByteArray bytestr = qstrMisc.toLocal8Bit().left(18);qDebug() << "bytestr=" << bytestr;//"Good Good Study!\xCC\xEC"QString localstr = QString::fromLocal8Bit(bytestr);qDebug() << "localstr=" << localstr;//"Good Good Study!天"//okey!QString strOkey = qstrMisc.left(18);qDebug() << "strOkey=" << strOkey;//"Good Good Study!天天"return a.exec();
}
输出结果:
qstrEN.length()= 12
qstrZH.length()= 16
qstrZH.length()= 10
qstrMisc.length()= 26
qstrMisc.length()= 21
bytestr= "Good Good Study!\xCC\xEC"
localstr= "Good Good Study!天"
strOkey= "Good Good Study!天天"
可以看到,在遇到中文或者中英文混合的字符串时,我们必须先通过 toLocal8Bit() 转为本地操作系统设置的字符集编码,然后再使用 length() 计算,才能得到正确的结果!
QT 如何计算中英文字符串的长度相关推荐
- 计算中英文字符串的长度!
/** * 怎么计算中英文字符串的长度 */ public class StringTest { public static void main(String[] args) throws Excep ...
- python面试题之如何计算一个字符串的长度
在我们想计算长度的字符串上调用函数len()即可 >>> len('hhhhhhhhjg') 10 所属网站分类: 面试经典 > python 作者:外星人入侵 链接:http ...
- 中英文字符串获取长度
function isChinese(str) { //判断是不是中文汉字.中文标点 var reCh = /[u4e00-u9fa5]/; //常用中文标点符号 . ...
- ASP如何计算中英文混合字符串长度和截取字符串
用ASP做网站的时候经常会碰到要截取字符串的情况.ASP中的Len函数不管是中文字符,还是英文字符,统统按一个单位来计算,由于一个中文字符的宽度是一个英文字符宽度的两倍,在中英文混合的情况下字符串实际 ...
- PHP函数计算中英文字符串长度的方法
利用php函数计算中英文混合字符串长度的方法 英文字符占一个字节,而中文字符gbk占两个字符,utf8占三个字符,php计算字符串长度strlen()函数,计算的是字节的长度而非字符的长度,获取一个字 ...
- Javascript中得到中英文混合字符串的长度
有同事在公司的OA上发了个贴子,介绍在javascript中如何得到中英文混合字符串的长度. 用的是正则表达式. var str = "坦克是tank的音译";var len = ...
- java中判断字符串实际长度(中文2个字符,英文1个字符)的方法,包含中英文符号
java中判断字符串实际长度(中文2个字符,英文1个字符)的方法,包含中英文符号 介绍 数据库中很多字段都会限制长度,为了方便用户使用,在前端界面给出限制长度的提示,看网上很多写的获取字符串长度都没有 ...
- JS 区分中英文字符/获取字符串实际长度(区分中英文)
获取字符串中全部中文字符 ^x00-x80 是全角字符的范围(注意这里有个非),通过正则来获取字符串中的全角字符. // 获取全部中文字符(字符串) ,返回中文字符组成的数组 function get ...
- Javascript 计算中英文字符串长度
中英文字符串长度计算方法: <html> <body> <mce:script type="text/javascript"><!-- v ...
最新文章
- Silverlight 全屏模式
- Linux系统文件和目录管理
- 解禁策略组、注册表、各种应用程序、控制面板、运行、USB
- MATLAB双纵坐标绘图(重要)
- linux 两个序列比对,如何用COBALT构建本地的多序列比对(Linux系统)
- java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码...
- Intel Core Solo/Duo处理器架构/微架构/流水线 - 前端/数据预取/SSE3
- 锤子t1重置后怎么显示无服务器,解决锤子手机smartisanT1关机后无法正常开机(附带刷机教程图文)...
- 编写tcp服务器发送hex格式_Android网络编程-TCP/IP协议
- js获取html5 audio 音频时长方法
- EXCEL数据处理小结(SQL)
- HTML5期末大作业:商城后台网站设计——网站商城后台通用模板(30页) 大学生后台模板网页作品商城网页设计作业模板 学生网页制作源代码下载
- 2014 年移动设备界面设计有哪些趋势?
- PMP 第六章 项目时间管理
- 5G网络中的缩略语与简写
- [FMG]两个简单的JSP+servlet小程序
- 计算机主机光驱弹不出来怎么办,电脑dvd光驱打不开,光驱弹不出来解决
- node获取客户端ip
- redis系列-redis的连接
- 微信指数和其他平台的微指数有什么区别