为什么这个结果不一致?右侧的编码是调试器中显示的内容。我现在的问题是c1!= c2。
QChar c1 = 'ç'; //==> 50087
QString str = "ç";
QChar c2 = str.at(0); //==> 231
QChar c3 = QString(c1).at(0); //==> 50087
答案 0 :(得分:2)
Qt可能会错误解释您的角色,将其作为签名的短片处理并对其应用sign extension,这会产生不正确的50087值。如果你明确地将角色转换为无符号角色 - (uchar)'ç'
- 你应该得到一致的结果。
以下代码适合您:
QChar c1 = (uchar)'ç'; //==> 231
QString str = "ç";
QChar c2 = str.at(0); //==> 231
QChar c3 = QString(c1).at(0); //==> 231
但是,由于您使用的字符集位于extended ASCII范围内,因此我建议您对源字符串和字符使用宽字符或UTF8编码,以避免在它出现时出现歧义到扩展的ASCII范围。扩展ASCII范围中的字符根据代码页进行解释,这可能会导致"character set confusion"。