在使用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