在 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】:

用字符构建QStrings 并使用它们进行比较:

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 而不是QCharQString::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 进行比较的主要内容,如果未能解决你的问题,请参考以下文章

Unicode与编码方式

Qt--QString

Java中将字符串与unicode的相互转换工具类

将unicode字符串与c ++符号进行比较?

如何将 unicode 类型与 python 中的字符串进行比较?

在 SQLite3 中将字符串与数字进行比较