日常开发中,可能都会用到统计字符串长度,如果是英文和数字,一般情况计算出来的长度是正确的。但是,遇到中英文混合的情况,如果还是用之前的统计方式,得到的结果往往是不准确的!

用户心里预期

我们在一些网站上填写信息时,一般都会有字符个数的提示,对于用户而言,只要输入的都算字符,别管中文字符英文字符占多少个字节,那是你们程序员的事情!那么我们先共识一下用户的心里预期:

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 如何计算中英文字符串的长度相关推荐

  1. 计算中英文字符串的长度!

    /** * 怎么计算中英文字符串的长度 */ public class StringTest { public static void main(String[] args) throws Excep ...

  2. python面试题之如何计算一个字符串的长度

    在我们想计算长度的字符串上调用函数len()即可 >>> len('hhhhhhhhjg') 10 所属网站分类: 面试经典 > python 作者:外星人入侵 链接:http ...

  3. 中英文字符串获取长度

    function isChinese(str) {  //判断是不是中文汉字.中文标点         var reCh = /[u4e00-u9fa5]/;         //常用中文标点符号 . ...

  4. ASP如何计算中英文混合字符串长度和截取字符串

    用ASP做网站的时候经常会碰到要截取字符串的情况.ASP中的Len函数不管是中文字符,还是英文字符,统统按一个单位来计算,由于一个中文字符的宽度是一个英文字符宽度的两倍,在中英文混合的情况下字符串实际 ...

  5. PHP函数计算中英文字符串长度的方法

    利用php函数计算中英文混合字符串长度的方法 英文字符占一个字节,而中文字符gbk占两个字符,utf8占三个字符,php计算字符串长度strlen()函数,计算的是字节的长度而非字符的长度,获取一个字 ...

  6. Javascript中得到中英文混合字符串的长度

    有同事在公司的OA上发了个贴子,介绍在javascript中如何得到中英文混合字符串的长度. 用的是正则表达式. var str = "坦克是tank的音译";var len = ...

  7. java中判断字符串实际长度(中文2个字符,英文1个字符)的方法,包含中英文符号

    java中判断字符串实际长度(中文2个字符,英文1个字符)的方法,包含中英文符号 介绍 数据库中很多字段都会限制长度,为了方便用户使用,在前端界面给出限制长度的提示,看网上很多写的获取字符串长度都没有 ...

  8. JS 区分中英文字符/获取字符串实际长度(区分中英文)

    获取字符串中全部中文字符 ^x00-x80 是全角字符的范围(注意这里有个非),通过正则来获取字符串中的全角字符. // 获取全部中文字符(字符串) ,返回中文字符组成的数组 function get ...

  9. Javascript 计算中英文字符串长度

    中英文字符串长度计算方法: <html> <body> <mce:script type="text/javascript"><!-- v ...

最新文章

  1. Silverlight 全屏模式
  2. Linux系统文件和目录管理
  3. 解禁策略组、注册表、各种应用程序、控制面板、运行、USB
  4. MATLAB双纵坐标绘图(重要)
  5. linux 两个序列比对,如何用COBALT构建本地的多序列比对(Linux系统)
  6. java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码...
  7. Intel Core Solo/Duo处理器架构/微架构/流水线 - 前端/数据预取/SSE3
  8. 锤子t1重置后怎么显示无服务器,解决锤子手机smartisanT1关机后无法正常开机(附带刷机教程图文)...
  9. 编写tcp服务器发送hex格式_Android网络编程-TCP/IP协议
  10. js获取html5 audio 音频时长方法
  11. EXCEL数据处理小结(SQL)
  12. HTML5期末大作业:商城后台网站设计——网站商城后台通用模板(30页) 大学生后台模板网页作品商城网页设计作业模板 学生网页制作源代码下载
  13. 2014 年移动设备界面设计有哪些趋势?
  14. PMP 第六章 项目时间管理
  15. 5G网络中的缩略语与简写
  16. [FMG]两个简单的JSP+servlet小程序
  17. 计算机主机光驱弹不出来怎么办,电脑dvd光驱打不开,光驱弹不出来解决
  18. node获取客户端ip
  19. redis系列-redis的连接
  20. 微信指数和其他平台的微指数有什么区别

热门文章

  1. Python条件语句和循环
  2. 论文总结-交通预测(未完成)
  3. vue即时通讯,一个很好用的插件
  4. MTK笔试面试题集锦
  5. 什么是5G前传、中传、回传?
  6. 京东数据分析工程师(实习生)笔试
  7. 各种浏览器的内核是什么
  8. 爬取豆瓣电影剧情片排行榜
  9. 英特尔宣布推出新的“ Compute Stick”-一种笔式驱动器大小的PC
  10. [CTSC2016]时空旅行