字符串到字符*的特殊字符转换

String to char * conversion for special character

本文关键字:特殊字符 转换 字符 字符串      更新时间:2023-10-16

我在C++/Qt中编写了一个简单的函数,将QString转换为char*。

功能运行良好,但我在某些特定角色上遇到了一些问题。例如,作为QString参数的"piña-colada"被转换为"pi?a-colda"。我认为在向拉丁裔的转变中出了问题。

我想要QString的"piña colada"在char*中保持"piñ

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

知道吗?

感谢

latin1不能表示ñ字符,或者当您实际打印字符时,它的编码错误。您可以尝试使用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();