C++ 在Qt中将字符与unicode进行比较

C++ 在Qt中将字符与unicode进行比较,c++,string,qt,c++11,C++,String,Qt,C++11,我想将(i)类型QString处的字符与上面提到的unicode进行比较。但它不起作用。那么如何比较呢?用字符构建QStrings并使用它们进行比较: if (lineEditText[i] == 'đ' || lineEditText[i] == 'Đ') lineEditText.replace(i, 1, "d"); 或者使用,以便正确地将其转换为QChar: if (lineEditText[i] == QString("đ")[0] || lineEditText[i] =

我想将(i)类型QString处的字符与上面提到的unicode进行比较。但它不起作用。那么如何比较呢?

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

if (lineEditText[i] == 'đ' || lineEditText[i] == 'Đ')
     lineEditText.replace(i, 1, "d");
或者使用,以便正确地将其转换为
QChar

if (lineEditText[i] == QString("đ")[0] || lineEditText[i] == QString("Đ")[0])

用字符构建
QString
s并将其用于比较:

if (lineEditText[i] == 'đ' || lineEditText[i] == 'Đ')
     lineEditText.replace(i, 1, "d");
或者使用,以便正确地将其转换为
QChar

if (lineEditText[i] == QString("đ")[0] || lineEditText[i] == QString("Đ")[0])

您可以从其十六进制代码生成unicode字符,并将其传递给
QChar(uint(hexValue)
。只要两侧的数据类型相同,就可以将QChar与“==”进行比较

if (lineEditText[i] == L'đ' || lineEditText[i] == L'Đ') 

编辑:我之前的回答主要是生成一个而不是
QChar
QString::fromUcs4()
不起作用,因为您试图将它与QLineEdit中的特定字符与unicode字符进行比较(我应该生成一个QChar而不是QString进行比较).

您可以从其十六进制代码生成unicode字符,并将其传递给
QChar(uint(hexValue)
。只要两侧的数据类型相同,就可以将QChar与“==”进行比较

if (lineEditText[i] == L'đ' || lineEditText[i] == L'Đ') 

编辑:我之前的回答主要是生成一个而不是
QChar
QString::fromUcs4()
不起作用,因为您试图将它与QLineEdit中的特定字符与unicode字符进行比较(我应该生成一个QChar而不是QString进行比较)。

可能会有所帮助(并且是重复的)。这可能与字符编码问题有关-您的编译器期望什么样的源编码,源文件使用什么编码?它应该只在ISO-8859-1或UTF-16环境中工作,但如果
đ
Đ
是多字节字符(例如,在UTF-8或ISO-2022-JP中),则可能会出现问题。值得确保编译器警告有关多字节文字的信息-您可以使用简单的
'xx'
对其进行测试。可能会有所帮助(并且是重复的)。这可能与字符编码问题有关-您的编译器希望使用什么源编码,源文件使用什么编码?它应该只在ISO-8859-1或UTF-16环境中工作,但如果
đ
Đ
是多字节字符(例如UTF-8或ISO-2022-JP中),则可能会出现问题。值得确保编译器对多字节文字发出警告-您可以用一个简单的
'xx'
来测试它。我已经尝试过了,但我看到了一个错误:运算符==(类型是QCharRef和QString)没有macth。我想Aditya的意思是
QChar(unicode>)和
QChar(unicodemalld)
,而不是创建
QString
对象。(甚至
静态常量QChar unicodeCapitalD(0x00D0);
然后简单地
lineEditText[i]==unicodeCapitalD
,等等)Toby是对的。为了反映这一点,我更改了我的答案。我忽略了您试图进行比较。我尝试过,但我看到了一个错误:operato==(类型为QCharRef和QString)没有macth,我想Aditya的意思是
QChar(unicodeCapitalD)
QChar(unicodeSmallD)
,而不是创建
QString
对象。(甚至
静态常量QChar unicodeCapitalD(0x00D0);
然后简单地
lineEditText[i]==unicodeCapitalD
,等等)托比是对的。更改了我的答案以反映这一点。我忽略了您试图进行比较。