【问题标题】:compare a character with an unicode in Qt在 Qt 中将字符与 unicode 进行比较
【发布时间】: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' 对其进行测试。

标签: c++ string qt c++11


【解决方案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等)
    • 托比是对的。更改了我的答案以反映这一点。我忽略了你试图比较。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 2020-05-29
    • 2013-05-04
    • 1970-01-01
    相关资源
    最近更新 更多