有一个表情符号https://emojipedia.org/tooth/ - 您需要将其从字符串中删除。
Unicode 取自这里:https ://www.fileformat.info/info/unicode/char/1f9b7/index.htm
选项:
C/C++/Java 源代码“\uD83E\uDDB7”
if (d->at(k).contains(u8"\\uD83E\\uDDB7"))
if (d->at(k).contains(QString::fromUtf8(QByteArray("f09fa6b7"))))
这两个选项都不起作用。
此外,当输出 Qdebug() 时,字符显示为https://www.fileformat.info/info/unicode/char/1f9b7/index.htmU0001F9B7
判断- 这是
Python 源代码 u"\U0001F9B7"
选项:
(*d)[k]=(*d)[k].remove("\\U0001F9B7");
- 也不起作用。
小说明:
在 Qt 中,调试时,这个 emoji 显示为两个字符55358(0xd83e)和56759 (0xdbd7),就像这里:
http://www.mauvecloud.net/charsets/CharCodeFinder.html (检查 - 🦷)
此外,检查这两个字符:
if (d->at(k).contains("0xd83e"))
和 if (d->at(k).contains("0xdbd7"))
- 正好相反,但是
const_cast<QString*>(&d->at(k))->remove("\0xd83e");
const_cast<QString*>(&d->at(k))->remove("\0xdbd7");
- 没有效果。
主要问题:
请告诉我如何删除此符号及其子公司(表情符号)
附加问题: 此外,您可以阅读有关编码及其格式的问题。
UPD:这些选项不起作用。
(*d)[k]= (*d)[k].replace("\\55358","");
(*d)[k]= (*d)[k].replace("\\56759","");
(*d)[k]= (*d)[k].replace("\\154076","");
(*d)[k]= (*d)[k].replace("\\156667","");
(*d)[k]= (*d)[k].replace("\\0xdbd7","");
(*d)[k]= (*d)[k].replace("\\56759","");
(*d)[k]= (*d)[k].remove("\\55358");
(*d)[k]= (*d)[k].remove("\\56759");
(*d)[k]= (*d)[k].remove("\\154076");
(*d)[k]= (*d)[k].remove("\\156667");
(*d)[k]= (*d)[k].remove("\\0xdbd7");
(*d)[k]= (*d)[k].remove("\\56759");
(*d)[k]=(*d)[k].remove("\\U0001F9B7");
(*d)[k]= (*d)[k].remove(QRegularExpression("[\\x{1F600}-\\x{1F7FF}]+"));
(*d)[k]=(*d)[k].remove(QRegExp("(\\\\u[0-9a-fA-F]{4})"));
(*d)[k]=(*d)[k].remove(QRegExp("\\\\[0-9]{5,}"));
(*d)[k]= (*d)[k].remove("");
QRegularExpression numberRegularExpression("\\\\[0-9]{5}");
//или numberRegularExpression("[\\x{1F600}-\\x{1F7FF}]+")
//или numberRegularExpression("(\\\\u[0-9a-fA-F]{4})")
起初我试图拉出 ESC 序列,然后 - 我想反转和拉伸,除了 hasNext 之外的所有东西都不起作用
QRegularExpressionMatchIterator i = numberRegularExpression.globalMatch( (*d)[k]);
//find template matches
// numberRegExp.indexIn(tmpNumber);
//get coincidences
QStringList capturedData;//=numberRegExp.capturedTexts();
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
QString word = match.captured(1);
capturedData << word;
}
insertDataQuery.bindValue(columns.at(k),d->at
此外,该主题的英文选项也无济于事:
这是一个简单的正则表达式,但支持它!
$re = '/[ (\x{1F600}-\x{1F64F})| (\x{2700}-\x{27BF})|
(\x{1F680}-\x{1F6FF})| (\x{24C2}-\x{1F251})| (\x{1F30D}-\x{1F567})|
(\x{1F900}-\x{1F9FF})| (\x{1F300}-\x{1F5FF}) ]/mu';
原来是删除字符。底线是,由于某种原因,如果您尝试通过引用它来删除或替换它,Qt 不接受该符号
U0001F9B7
,即使该符号确实存在于那里并且以这种格式输出到控制台qDebug()
。去除emoji字符,需要使用静态方法
QString::fromWCharArray()
——在哪里转移代理对(正是那些在调试器中可见的55358(0xd83e) 和 56759 (0xdbd7) - 在我的例子中,对于这个表情符号)。
该方法将如下所示:
而且,奇怪的是,它会返回相同的字符串 -
U0001F9B7
,但由于某种原因,Qt 已经完美地删除了它:帮我找到答案:
https://stackoverflow.com/questions/30247319/how-do-you-use-unicode-in-qt
(以防万一,我会在此处复制答案的文本,因为SO确实不喜欢指向其他答案的链接,但我留下了一个链接,以便感谢原始答案的作者)
http://www.russellcottrell.com/greek/utilities/SurrogatePairCalculator.htm