Преобразование строки в символ * для специального символа

Я написал простую функцию в C++/Qt для преобразования QString в char*.

Функция работает нормально, но у меня были некоторые проблемы с каким-то конкретным персонажем. например, "piña colada" в качестве параметра QString преобразуется в "pi?a colada". что-то не так я думаю в преобразовании toLatin1.

Я хочу, чтобы "piña colada" из QString оставалась "piña colada" в char *

char *convertQStr2char(QString str) {
    QByteArray latin_str;
    char *return_str;
    latin_str = str.toLatin1();
    return_str = latin_str.data();
    return return_str;
}

Любая идея?

Спасибо

2 ответа

Латиница 1 не может представлять символ - или когда вы на самом деле печатаете символ, он находится в неправильной кодировке. То, что вы можете попробовать, это использовать toLocal8Bit вместо toLatin1, это гарантирует, что используемая кодировка будет установлена ​​на машине. Но лучше было бы кодировать с использованием UTF8, поэтому toUtf8, что сохранит любой вид специальных символов.

И, как указано в другом ответе, кроме проблем с кодированием, ваш текущий код также приведет к неверному чтению.

Это работает для меня. Как прокомментировано, тип возврата был изменен для лучшего управления памятью:

std::string convertQStr2char(QString str) {
    return std::string( str.toLatin1().constData() );
}

// usage:
std::string temp = convertQStr2char( str );
const char* tempChar = temp.c_str();
Другие вопросы по тегам