一、乱码原因
根本原因在于QString使用的是UTF-16编码,而std::string通常以本地编码或UTF-8存储数据。
-
QString内部使用UTF-16编码,能够正确表示Unicode字符。
-
std::string则依赖于平台默认的编码方式,可能是ASCII、GBK或其他编码。
二、QString转std::string方式
要解决这个问题,首先需要明确目标编码格式。如果目标是将QString转换为UTF-8编码的std::string,使用
QString::toUtf8()
如果是系统本地编码,使用
QString::toLocal8Bit()
QString myQString = "你好";
std::string utf8Str = myQString.toUtf8().constData();
// 示例代码:QString转本地编码的std::string
std::string localStr = myQString.toLocal8Bit().constData();
三、std::string转QString方式
QString::fromLocal8Bit(str.data());