我在C ++ / Qt中编写了一个简单的函数来将QString转换为char *。
该功能运行正常,但我在某些特定字符上遇到了一些问题。例如“piñacolada”作为QString参数被转换为“pi?a colada”。我认为在toLatin1转换中出了点问题。
我希望来自QString的“piñacolada”在char *中留下“piñacolada”
char *convertQStr2char(QString str) {
QByteArray latin_str;
char *return_str;
latin_str = str.toLatin1();
return_str = latin_str.data();
return return_str;
}
有什么想法吗?
由于
答案 0 :(得分:1)
latin1无法表示ñ字符,或者当您实际打印字符时,它的编码错误。您可以尝试使用toLocal8Bit
而不是toLatin1
,这将确保使用的字符编码是计算机上设置的字符编码。但更好的方法是使用UTF8编码,所以toUtf8
,这将保留任何类型的特殊字符。
正如另一个答案中所指出的,除了编码问题之外,您当前的代码也会导致读取无效。
答案 1 :(得分:1)
这对我有用。如评论所述,返回类型已更改,以便更好地进行内存管理:
std::string convertQStr2char(QString str) {
return std::string( str.toLatin1().constData() );
}
// usage:
std::string temp = convertQStr2char( str );
const char* tempChar = temp.c_str();