• 3136阅读
  • 15回复

QString 转char *  出现乱码 [复制链接]

上一主题 下一主题
离线岭南小菜
 

只看楼主 倒序阅读 楼主  发表于: 2019-05-30
程序读取txt文件的内容,txt的内容如图4所示。读取文件后将每条记录转化为char * 保存到vector<char>中。QString转char *的代码见图片1。转化结果见图片2和图片3.  不知道QString转char *出现乱码的原因是什么,请帮忙分析一下。







离线岭南小菜

只看该作者 1楼 发表于: 2019-05-30
顶顶,请江湖大侠指点迷津。
离线岭南小菜

只看该作者 2楼 发表于: 2019-05-30
补充一下:读取文件后将每条记录转化为char * 保存到vector<char *>中。
在线20091001753

只看该作者 3楼 发表于: 2019-05-30
首先,你确定本地文本是什么编码,有可能是本地编码,也有可能是utf8
设置好编码后再读取,至少不会存在乱码。

QString::fromLocal8Bit(file.readAll());//本地编码

QString(file.readAll());//utf8编码
(づ ̄ 3 ̄)づ
离线岭南小菜

只看该作者 4楼 发表于: 2019-05-31
好的,我试一下。
离线fsu0413

只看该作者 5楼 发表于: 2019-05-31
我认为是QString本身就已经有乱码了
离线岭南小菜

只看该作者 6楼 发表于: 2019-05-31
QString转QByteArray后,debug输出还是正常的。
离线岭南小菜

只看该作者 7楼 发表于: 2019-05-31
回 20091001753 的帖子
20091001753:首先,你确定本地文本是什么编码,有可能是本地编码,也有可能是utf8
设置好编码后再读取,至少不会存在乱码。
QString::fromLocal8Bit(file.readAll());//本地编码

....... (2019-05-30 19:42) 

您好,不是编码的问题。
离线圣域天子

只看该作者 8楼 发表于: 2019-05-31
    QString s = QStringLiteral("不会是乱码的");
    cout<<s.toUtf8().data()<<endl;
    cout<<s.toLocal8Bit().data()<<endl;
离线岭南小菜

只看该作者 9楼 发表于: 2019-05-31
版主,你好,读取文件后,生成的QVector<QString> lineList,遍历lineList生成QByteArray,将QByteArray打印输出,字符输出正常。没有乱码。
2为读取文件的代码,3为输出的QByteArray。感觉问题很奇怪。
离线岭南小菜

只看该作者 10楼 发表于: 2019-05-31
下图代码读取文件的时候,直接存储到char*,再把char*指针放到Vectory中,只能读取一条数据,显示正常。加上注释部分后,vector中的内容都是最后一条记录。求原因?
离线圣域天子

只看该作者 11楼 发表于: 2019-05-31
  1. bool fswFile::loadTextFile(QString& content, const QString &filePath, const QString &codec /* = QString() */)
  2. {
  3.     bool ret = false;
  4.     QFile file(filePath);
  5.     if (file.open(QIODevice::ReadOnly|QIODevice::Text))
  6.     {
  7.        QTextStream in(&file);
  8.        if (!codec.isEmpty())
  9.        {
  10.            in.setCodec(codec.toLatin1().data());
  11.        }
  12.        content = in.readAll();
  13.        ret = true;
  14.        file.close();
  15.     }
  16.     return ret;
  17. }


离线岭南小菜

只看该作者 12楼 发表于: 2019-05-31
有偿,请大侠指点迷津啊  被这个问题搞郁闷了。。。。。。
离线岭南小菜

只看该作者 13楼 发表于: 2019-05-31
有意的大侠,留QQ号,我加您把我的这部分代码给您发过去。
离线岭南小菜

只看该作者 14楼 发表于: 2019-05-31
回 圣域天子 的帖子
圣域天子:bool fswFile::loadTextFile(QString& content, const QString &filePath, const QString &codec /* = QString() */)
{
    bool ret = false;
    QFile file(filePath);
    if (file.open(QIODevice: .. (2019-05-31 13:12) 

版主,您邮箱或QQ多少,我把我的测试程序给您发一下。
离线岭南小菜

只看该作者 15楼 发表于: 2019-05-31
各位,问题已经解决了。谢谢各位的回复!!!
快速回复
限100 字节
 
上一个 下一个