从QString解析QChar而不是直接赋值

时间:2014-03-24 17:10:27

标签: qt

为什么这个结果不一致?右侧的编码是调试器中显示的内容。我现在的问题是c1!= c2。

QChar c1 = 'ç';                //==> 50087
QString str = "ç";
QChar c2 = str.at(0);          //==> 231
QChar c3 = QString(c1).at(0);  //==> 50087

1 个答案:

答案 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"