• 7496阅读
  • 5回复

编码转换问题,这几句代码错了吗? [复制链接]

上一主题 下一主题
离线conta
 
只看楼主 倒序阅读 楼主  发表于: 2010-06-01


        QString str ("我们我们我们我们");

        QByteArray byte;

        QTextStream outStream(&byte);

        outStream.setCodec("gb18030");

        outStream<<str;

        qDebug()<<byte.size();


为什么输出结果是0,也即byte里最后什么东西都没有?
离线benbenmajia

只看该作者 1楼 发表于: 2010-06-02
你要先知道QString和QByte他们中的存储是以什么样的数据类型来的,前天有个帖子里面dbzhang总结的很清楚,你去看一下
安然.....
离线conta
只看该作者 2楼 发表于: 2010-06-02
我是清楚的,
我觉得这里是QTextStream的用法,可能出现了问题...

编码转换后,数据没有存放到QByteArray里...


我用以下语句,存放到本地,没有半点问题:

        QString str ("我们我们我们我们");

        QFile file("out.txt");

if (file.open(QFile::ReadOnly|QFile::Text)) {

        QTextStream outStream(&file);

        outStream.setCodec("gb18030");

        outStream<<str;
    
        file.close();

}

        qDebug()<<byte.size();


引用第1楼benbenmajia于2010-06-02 09:36发表的  :
你要先知道QString和QByte他们中的存储是以什么样的数据类型来的,前天有个帖子里面dbzhang总结的很清楚,你去看一下

离线dbzhang800

只看该作者 3楼 发表于: 2010-06-02
引用第2楼conta于2010-06-02 10:35发表的 :
我是清楚的,


这个清楚不清楚,你可以把 str.size() 的结果贴出来

如果你知道 对于   QString str ("我们我们我们我们");
何时是 8,何时是16,何时是24,那么你对编码就相当了解了

引用第2楼conta于2010-06-02 10:35发表的 :
我觉得这里是QTextStream的用法,可能出现了问题...

编码转换后,数据没有存放到QByteArray里...



你的 QTextStream 用法有问题,因为你没考虑缓冲的问题!
用 flush

引用第2楼conta于2010-06-02 10:35发表的 :
我用以下语句,存放到本地,没有半点问题:

        QString str ("我们我们我们我们");

        QFile file("out.txt");

if (file.open(QFile::ReadOnly|QFile::Text)) {

        QTextStream outStream(&file);

        outStream.setCodec("gb18030");

        outStream<<str;
    
        file.close();




        qDebug()<<byte.size();



这样的话,你让别人以后怎么相信你呢
离线conta
只看该作者 4楼 发表于: 2010-06-02
引用第3楼dbzhang800于2010-06-02 11:39发表的  :
这样的话,你让别人以后怎么相信你呢  




不好意思,我贴错了,但我真的自信对编码还是熟悉的...

我的完整代码是这样的:

#include <QString>
#include <QByteArray>
#include <QCoreApplication>
#include <QTextStream>
#include <QTextCodec>
#include <QFile>
#include <QDebug>
int main(int argc,char* argv[])
{
    QCoreApplication app(argc,argv);

    app.addLibraryPath("./plugins");                         //这里是插件...
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gb18030"));

    QString str("我们我们我们我们");qDebug()<<str;
    QFile file("out.txt");
    if (file.open(QFile::WriteOnly|QFile::Text)) {
    QTextStream outStream(&file);
    outStream.setCodec("gb18030");
    outStream<<str;                                                     //显然,这里str经编码转换,存到本地了,最后打开out.txt文档看了,没有问题...
    file.close();
}
    return app.exec();
}



****************************
你刚才说,我没有考虑到缓冲的问题,需要用flash,那具体我该如何做?























离线dbzhang800

只看该作者 5楼 发表于: 2010-06-02
引用第4楼conta于2010-06-02 12:54发表的  :
#include <QString>
#include <QByteArray>
#include <QCoreApplication>
#include <QTextStream>
#include <QTextCodec>
#include <QFile>
#include <QDebug>
int main(int argc,char* argv[])
{
    QCoreApplication app(argc,argv);
    app.addLibraryPath("./plugins");                         //这里是插件...
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gb18030"));
    QString str("我们我们我们我们");qDebug()<<str;
    QFile file("out.txt");
    if (file.open(QFile::WriteOnly|QFile::Text)) {
    QTextStream outStream(&file);
    outStream.setCodec("gb18030");
    outStream<<str;                                                     //显然,这里str经编码转换,存到本地了,最后打开out.txt文档看了,没有问题...
    file.close();
}
    return app.exec();
}
****************************
你刚才说,我没有考虑到缓冲的问题,需要用flash,那具体我该如何做?


1. 你这个例子是没问题的,(但你前面没提到你设置了 setCodecForCStrings)
   进一步说,最后打开文件看了,没有问题,也不能说明完全没问题。你要你把两处gb18030 同时改为 latin1 或 latin2 等编码,你同样能得到正常的文本。

2. 我说的可是 flush,具体自己看manual
快速回复
限100 字节
 
上一个 下一个