带有特殊字符的QString到const char *

时间:2012-12-12 16:41:59

标签: qt char special-characters qstring

我试图将带有特殊字符的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”。我该如何解决这个问题

2 个答案:

答案 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()或它写入的流中。