我试图将带有特殊字符的QString转换为const char *但是我没有成功。我的职责是:
void class::func(const QString& Name) // fileName = "â.tmp"
{
qDebug()<< Name; // display "â.tmp"
const char* cfileName = Name.toAscii().data();
qDebug() << cfileName; // display "a?.tmp"
}
qDebug()&LT;&LT; fileName显示真正的值“â.tmp”但在将其转换为const char *之后,我没有成功获得正确的值。
第二次尝试使用const char * cfileName = QString :: fromUtf8(fileName.toAscii()。data());但我仍然没有正确的价值,它显示了同样的事情:“a?.tmp”。我该如何解决这个问题
答案 0 :(得分:1)
由于将QString转换为const char *:
QString str("hi lor!");
const char *s = str.toStdString().c_str();
msg.setText(QString::fromUtf8(s));
msg.exec();
答案 1 :(得分:0)
编辑:使用QByteArray QString::toUtf8 () const
要好得多
QString string = "â.tmp";
const char* encodedString = string.toUtf8().data();
原始
您可能需要使用编解码器,请参阅http://qt-project.org/doc/qt-4.8/qtextcodec.html
这样的事情应该有效:
QString string = "â.tmp";
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QByteArray encodedString = codec->fromUnicode(string);
文档没有说明什么编码类型QDebug&amp; QDebug ::运营商LT;&LT; (const char * s)支持,它可能是平台相关的,尝试验证另一个正确的转换。问题可能出在qDebug()或它写入的流中。