字符串转换为特殊字符的char *转换

时间:2015-02-20 08:45:53

标签: c++ qt char qstring

我在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;
}

有什么想法吗?

由于

2 个答案:

答案 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();