• 7512阅读
  • 11回复

初学者关于文本编码转换的问题 [复制链接]

上一主题 下一主题
离线chnjeff
 
只看楼主 正序阅读 楼主  发表于: 2010-12-18
各位大大,小弟初学Qt,最近突发奇想自己做了一个把utf8编码格式的txt文件转换为ansi(windows下应该是GBK编码吧)编码格式的程序。于是翻出了一个老坟,是XChinux大大很多年前写的关于编码转换的简便方法(貌似)。。。我程序里的函数采用的就是XChinux的方法。
我的代码如下:
里面it是一个QStringList的指针,这个list里是多个待转换文件的绝对路径
 
QString inputText, outputText;
QFile inFile(static_cast<QString>(*it));    //指针指向的绝对路径
        if (!inFile.open(QIODevice::ReadOnly | QIODevice::Text))    //判断操作合法性
            return;
        QTextStream in(&inFile);        //文件输入流
        inputText = in.readAll();   //转换文件编码
        outputText = Utf8_To_GB(inputText);
        QFileInfo fi(*it);          //获得原始文件名
        QTextStream(&outDir) << dir << "\\" << fi.fileName();   //生成输出路径
        QFile outFile(outDir);
        if (!outFile.open(QIODevice::WriteOnly | QIODevice::Text))  //判断操作合法性
            return;
        QTextStream out(&outFile);  //文件输出流
        out << outputText;

 

因为我的输入文件是utf8无bom格式的,所以我输入时没有进行编码转换,只在输出时进行了编码转换

现在的问题是转换出来的文档大部分都是正确的,但有些地方会出现丢字的现象。。。

我用一小段文本举例如下:

转换前:

文件发布时间:2010-7-14 5:25:18

更多内容敬请关注SF轻小说(http://book.sky-fire.com)

 

小说名称:灼眼的夏娜

 

本卷名称:第一卷

 

序章

 

那一天

 

转换后:

文件发布时间:2010-7-14 5:25:18

更多内容敬请关注SF轻小http://book.sky-fire.com)

 

小说名称:灼眼的夏娜

 

本卷名称:第

 

序章

 

那一

 

 

后面正文段中也有类似的丢字情况,而且每行前面的制表符也没有了,希望知道问题出在哪了,多谢各位了~

离线XChinux

只看该作者 11楼 发表于: 2011-01-18
9楼的正解。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线chnjeff
只看该作者 10楼 发表于: 2010-12-22
回 9楼(cycloneii) 的帖子
感谢~我先拿走试试~
离线cycloneii

只看该作者 9楼 发表于: 2010-12-20
QFile infile("in.txt");
if (!infile.open(QIODevice::ReadOnly | QIODevice::Text))
         return;
QFile outfile("out.txt");
if (!outfile.open(QIODevice::WriteOnly | QIODevice::Text))
    return;
QTextStream instream(&infile);
QTextStream outstream(&outfile);
instream.setCodec("UTF-8");
outstream.setCodec("GB18030");
outstream << instream.readAll();
离线chnjeff
只看该作者 8楼 发表于: 2010-12-20
真的没有人回答了么。。。唉。。。
离线chnjeff
只看该作者 7楼 发表于: 2010-12-20
看到XChinux大大出现了。。。顶上去等解答。。。
离线chnjeff
只看该作者 6楼 发表于: 2010-12-19
继续顶上去坐等解答。。。。
离线chnjeff
只看该作者 5楼 发表于: 2010-12-18
回 5楼(jdwx) 的帖子
啊。。。这样啊。。。不过为什么?现在版本的Qt不用这样实现?
离线jdwx

只看该作者 4楼 发表于: 2010-12-18
你的代码太古老了!
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线chnjeff
只看该作者 3楼 发表于: 2010-12-18
回 2楼(gly6674530) 的帖子
感谢楼上帮顶~等待高手解答~
离线gly6674530
只看该作者 2楼 发表于: 2010-12-18
离线chnjeff
只看该作者 1楼 发表于: 2010-12-18
上面出现了某网站的地址实在不好意思。。。小弟坐等各位解答。。。。
快速回复
限100 字节
 
上一个 下一个