Преобразование строки в символ * для специального символа
Я написал простую функцию в 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();