Конвертировать QString с UTF-8 (hex) в QString - PullRequest
0 голосов
/ 01 мая 2020

По сути, у меня есть строка типа "Sam\xe2\x80\x99s phone", и я хочу преобразовать ее в "Sam’s phone".

Какой самый простой способ сделать это в Qt или C ++?

Я мог бы l oop просмотреть каждый символ и найти \x и преобразовать все символы в шестнадцатеричные значения (кроме двух цифр после каждого \x), а затем преобразовать его в строку, но есть ли лучший способ?

РЕДАКТИРОВАТЬ:

void someFunction(int exitCode, QProcess::ExitStatus exitStatus){
    QProcess *someQProcess = reinterpret_cast<QProcess*>(sender());
    QString output = someQProcess->readAllStandardOutput();
    QStringList data = output.split("\n");
    parseScan(data);
}

void parseScan(QStringList data){
    QStringList nameList;
    for(int i = 2; i < data.size(); i++ ){
        QStringList dataLine  = data[i].split("\t");
        if(dataLine.size() == 5){
            QString name = dataLine[4];  // name is "Sam\xe2\x80\x99s phone"
        }
    }
}

Спасибо

1 Ответ

0 голосов
/ 01 мая 2020

Думаю, проблема в том, как вы читаете стандартный вывод. Действительно, ваш стандартный вывод имеет плохой шанс быть utf-8.
Я пытался воспроизвести то же поведение с echo:

QProcess *p = new QProcess();
p->start("echo \"Sam\xe2\x80\x99s phone\"", QProcess::OpenModeFlag::ReadOnly);
p->waitForFinished();

/* Read without conversion: */
// "Sam\xE2\x80\x99s phone\n"
qDebug() << p->readAllStandardOutput();
/* Read with conversion: */
// "Sam’s phone\n"
qDebug() << QString::fromLocal8Bit(p->readAllStandardOutput());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...