相关文章推荐
从容的莴苣  ·  Python | ...·  1 年前    · 

在使用Qt显示字符时,有时候我们显示文字时会带一些特殊的unicode字符,例如:

"\u200B[胜利][好奇]"  这里的\u200B其实是一个长度的unicode字符,在界面上是显示不了的,有时还会占用一个位置影响后面的字符显示,那么如何使用把这个字符过滤掉了,

QRegExp("[\u200B]")这样子是没有效果的,在Qt里应该这样写

QRegExp("[\\x200B]")

具体示例如下

QString FilterSpecialCharacters(QString &message)
    QString org1 = QStringLiteral("源字符=============== text= ");
    QString new1 = QStringLiteral("过滤后=============== temp= ");
    qDebug() << org1 << text << " length= " << text.length();
    QString temp = message;
    temp.remove(QRegExp("[\\x200B]"));//删除特殊字符
    qDebug() << new1 << temp << " length= " << temp.length();

运行结果:

首先声明,本文所有的代码都是在 ES6 下面运行,ES5需要修改之后才能运行,但是本文没有涉及到太多的ES6新特性,而且由于v8对u修饰符不支持,最后的实现也基本是用ES5的知识写的代码。 最初我只是想记录下正则表达式unicode的方式来匹配特殊字符,写着写着发现 v8 对 u 修饰符的不支持,又转而去研究怎么转换字符串到utf-16的格式,在研究怎么转换的过程中发现ES5的正则unicode 编码单元 > 0x10000 的字符串不支持,再转而去实现了一遍对大于 0x10000 的字符串的转换,特此记录。 之前有遇到过一个实用正则表达式匹配特殊字符的需求,例如一段文本 ‘ab*cd$ //^顶在前面 表示除。。。之外 // A-Z 代表大写 a-z代表小写字符 0-9表示数字 \u4e00-\u9fa5表示所有中文直接连在一起表示&& 在最前面加个^ 表示除这些字符以外的字符 QString new_......     在Qt编程过程中,有时候需要输出一些特殊符号,而这些符号并非ASCII码集的一部分,例如温度28.8°C。在中文的状态下比较容易实现(一般的中文输入法都有这些特殊符号的输入方法),但是在英文状态下就没那么直接了。在嵌入式Linux开发的过程中,很多时候只支持英文,那么如何在英文的状态下输入这些符号呢?本文将对此作一个总结。 2 度量单位 2.1 度——° 2、通过内容显示文本 QString m = QString::fromLocal8Bit("±"); //要这样写,不然会乱码 ui->pushButton->setText(m); 汉字转进制方法 文本转进制链接(这是我自己随便找的一个,用户可以自行选择) 汉字二进制 程序功能: 读取文本文件内容,整理输出新的文本文件,并在进度中提示处理进度。 输入的文本中,存在此字符串EXPLOSIÓN,Ó比较特殊。我读取到字符串需要用这个字符串来命名输出的新文本文件。 处理进度需要在标签中提示 正在输出EXPLOSIÓN.txt文件 而实际情况,显示的是 正在输出EXPLOSI脫N.txt Ó没有显示出来。 代码段是这样的: emit sendWaitingMsg(tr("正在输出%1.txt").arg(m_gameNam