在 Qt 中将字符与 unicode 进行比较
Posted
技术标签:
【中文标题】在 Qt 中将字符与 unicode 进行比较【英文标题】:compare a character with an unicode in Qt 【发布时间】:2018-01-08 16:36:59 【问题描述】:if (lineEditText[i] == 'đ' || lineEditText[i] == 'Đ')
lineEditText.replace(i, 1, "d");
我想将 (i) QString 类型的字符与上面的 unicode 进行比较。但它不起作用。那么如何比较呢?
【问题讨论】:
This 可能会有所帮助(并且是重复的)。 这可能与字符编码问题有关 - 您的编译器期望什么源编码,源文件是什么编码?它应该在 ISO-8859-1 或 UTF-16 环境中工作,但如果đ
和 Đ
是多字节字符(例如在 UTF-8 或 ISO-2022-JP 中),则可能会出现问题。值得确保您的编译器警告多字节文字 - 您可以使用简单的 'xx'
对其进行测试。
【参考方案1】:
用字符构建QString
s 并使用它们进行比较:
if (lineEditText[i] == QString("đ")[0] || lineEditText[i] == QString("Đ")[0])
或使用wide character literals,以便他们正确转换为QChar
:
if (lineEditText[i] == L'đ' || lineEditText[i] == L'Đ')
【讨论】:
【参考方案2】:您可以从其十六进制代码生成 unicode 字符并将其传递给QChar(uint(hexValue)
。只要两边的数据类型相同,就可以用'=='来比较一个QChar。
uint unicodeCapitalD = 0x00D0
unit unicodeSmallD = 0x0111
if (lineEditText[i] == QChar(unicodeSmallD) || lineEditText[i] == QChar(unicodeCapitalD))
//whatever you want to do
编辑:我之前的回答集中在生成QString containing the unicode character 而不是QChar
。 QString::fromUcs4()
不起作用,因为您试图将它与 QLineEdit 中的特定字符与 unicode 字符进行比较(我应该生成一个 QChar 而不是 QString 进行比较)。
【讨论】:
我试过了,但我看到一个错误:没有 macth foroperato == (类型是 QCharRef 和 QString) 我认为 Aditya 的意思是QChar(unicodeCapitalD)
和 QChar(unicodeSmallD)
,而不是创建 QString
对象。 (甚至是static const QChar unicodeCapitalD(0x00D0);
,然后只是lineEditText[i] == unicodeCapitalD
等)
托比是对的。更改了我的答案以反映这一点。我忽略了你试图比较。以上是关于在 Qt 中将字符与 unicode 进行比较的主要内容,如果未能解决你的问题,请参考以下文章