在 Qt 中将 `\oct` 转换为 `char`

converting `\oct` to `char` in Qt

我有一个像

这样的字符串
QString result ("very much text\374more Text");

backslash-int-int-int 表示以八进制数编写的字符。在本例中,它是 ü。我想要 char ü 而不是反斜杠表示。

那是我试过的:

while (result.contains('\'))
    if(result.length() > result.indexOf('\') + 3)
    {
        bool success;
        int i (result.mid(result.indexOf('\') + 1, 3).toInt(&success, 8));
        if (success)
        {
            //convert i to a string
            QString myStringOfBits ("\u" + QString::number(i, 16));
            //QChar c = myStringOfBits.toUtf8();
            //qDebug() << c;
        }
    }

我是菜鸟,我知道

默认情况下,qt 中的所有代码都应该是 utf8,因此您可以将 ü 放在字符串中。

假设我们有一个结果字符串:

QString result ("Ordner mit \246 und \214"); //its: "Ordner mit ö and Ö"

有一个解决方案:

result = QString::fromLatin1("Ordner mit \246 und \214");

但是你不能输入变量。如果你想放入一个变量,你可以使用 (char)(decimal)octal 到它的 char 等价物:

while (result.contains("\ ")) //replace spaces
    result = result.replace("\ ", " ");
while (result.contains('\')) //replace special characters
    if(result.length() > result.indexOf('\') + 3)
    {
        bool success;
        int a (result.mid(result.indexOf('\') + 1, 3).toInt(&success, 8)); //get the octal number as decimal
        //qDebug() << a; //print octal number
        //qDebug() << (char)a; //qDebug() will print "" because it can't handle special characters
        if (success)
        {
            result = result.mid(0, result.indexOf('\')) +
                    (char)a + //replace the special character with the char equivalent
                    result.mid(result.indexOf('\') + 4);
        }

    }

qDebug() 不会显示特殊字符,但 GUI 会:

所以它有效:)感谢大家