如何将QChar转换为cp866表中的char代码?

时间:2013-11-06 11:05:34

标签: qt ascii qt5 qchar cp866

如何在此表http://www.ascii-codes.com/cp866.html中获取qchar的int代码?

这是我的代码:

int getCp866Code(QChar c) {
    if (!c.isSurrogate()) {
        QString temp = c;
        QTextCodec* cp866 = QTextCodec::codecForName("IBM 866");
        QByteArray byteArray = cp866->fromUnicode(temp);
        return (int) byteArray[0];
    }
    return -1;
}

getCp866Code('ж')//返回-90,而不是166

1 个答案:

答案 0 :(得分:1)

这个问题很糟糕。 QChar是一个UTF-16代码单元(这也意味着它可以是代理对的一部分)。你最好的镜头是

  1. 检查它是代理对的一部分(QChar::isSurrogate
  2. 构建仅包含该char的QString,然后使用QTextCodec对CP866中的字符串进行编码。然后提取它的第一个字节。
  3. 请注意,如果您的代码点无法在CP866中编码,则未指定所获得的内容。