• 11822阅读
  • 13回复

[提问]请教qt 编码问题 [复制链接]

上一主题 下一主题
离线nana_aoe
 

只看楼主 倒序阅读 楼主  发表于: 2011-01-06
— 本帖被 XChinux 执行加亮操作(2011-01-09) —
首先,我使用过了历史帖搜索。没收到,希望大家能帮下
redhat9下,
在QT中我对文件进行了读写操作,读取的文件是ANSI编码的(我使用的记事本另存为的方法检测的),在QT界面显示读取的汉字是乱码

还有个问题,在Qt中使用fputs(“汉字”,fp);打印结果是乱码。
请教一下,我如何进行编码转换?
离线nana_aoe

只看该作者 1楼 发表于: 2011-01-06
我找到了问题所在。
就是我读取的文件是ansi,写出的文件时utf8,中间未经过转换,我的处理方法未先将ansi转为utf8,然后再读取文件,再写的时候就不是乱码了。

但是我又遇到了新的问题,就是我在lineEdit窗口下输入的汉字,不知道是什么编码的,那个汉字在写入文件后是乱码的,我能否设置lineEdit将要输入汉字的编码方式呢?这个编码方式是系统设定的还是qt中也可以设置呢?
请高手指点。
离线nana_aoe

只看该作者 2楼 发表于: 2011-01-06
这是我的/etc/sysconfig/i18n
LANG="zh_CN.GB18030"
SUPPORTED="zh_CN.GB18030:zh_CN:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16
离线jdwx

只看该作者 3楼 发表于: 2011-01-06
读写文件和在界面上显示是两回事
http://www.qtcn.org/bbs/read.php?tid=33522
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线XChinux

只看该作者 4楼 发表于: 2011-01-06
如果不做多国语言支持的话,建议源代码中总是使用GBK/GB18030编码,并在main函数中加下面语句:
QTextCodec::setCodecForCStrings(QTextCodec::setCodecForName("GBK"));
这样在代码中就能直接写汉字了(源代码文件要以GBK编码保存)。
读取文件的时候,也要注意编码,比如:

QFile file(strFile);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream in(&file);
in.setCodec("GBK");   // 设定文本文件内容编码。
while (!in.atEnd())
{
   QString strLine = in.readLine();
}
file.close();
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线nana_aoe

只看该作者 5楼 发表于: 2011-01-07
回 4楼(XChinux) 的帖子
大概明白了,看一下我的思路是否正确,
我现在要处理是的是,文件读写乱码,
首先使用了你的
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB18030"));
汉字可以正常读取到Qt显示界面上了,但是:
现在的问题是,我写文件时依然乱码, 比如说,原文件是“你好”,现在显示出来了,我改为“大家好”,再写到文件中,此时“大家好”在Qt界面中显示正常,但在文件中是乱码的。
我刚接触c++和qt,所以我的读写文件使用的是c方法,fopen,fputs
fputs得到的文件中,汉字依然乱码,我想应该是write的时候编码问题,
如果是使用C的方法该如何实现呢?
我用QT写文件的话,
out.setCodec("GB18030");
应该就OK了吧?
[ 此帖被nana_aoe在2011-01-07 09:28重新编辑 ]
离线nana_aoe

只看该作者 6楼 发表于: 2011-01-07
回 4楼(XChinux) 的帖子
我写了这样的测试程序,文件中显示乱码。
void ArgConf::testWrite()
{
    QFile file("/root/test/test.ini");
    if(file.open(QIODevice::WriteOnly|QIODevice::Append))
    {
        QTextStream out(&file);
        out.setCodec("GB18030");
        out<<"你好 "<<endl;
        file.close();
    }
}
离线dbzhang800

只看该作者 7楼 发表于: 2011-01-07
Re:回 4楼(XChinux) 的帖子
引用第6楼nana_aoe于2011-01-07 10:14发表的 回 4楼(XChinux) 的帖子 :
我写了这样的测试程序,文件中显示乱码。
void ArgConf::testWrite()
{
    QFile file("/root/test/test.ini");
    if(file.open(QIODevice::WriteOnly|QIODevice::Append))
.......

建议你先找点编码相关的资料了解一下,不然,盲目尝试的话,你可能永远不清楚问题出在哪儿。

比如:你这儿用到的

QTextStream & QTextStream::operator<< ( const char * string )

你知道这意味着什么么?
离线nana_aoe

只看该作者 8楼 发表于: 2011-01-07
回 7楼(dbzhang800) 的帖子
你是指的这句话吗?
“字符串s不依赖于QTextStream的编码设置,被假设为Latin1编码。”
我看里面所有关于 QTextStream & QTextStream::operator的重载函数,不知道该使用哪一个输出汉字。

离线nana_aoe

只看该作者 9楼 发表于: 2011-01-07
回 7楼(dbzhang800) 的帖子
我将汉字先付给QString 类型,再输出就正常了,有没有更好的办法啊,很多的汉字,难道我要一段一段的都付给QString变量吗?
离线jdwx

只看该作者 10楼 发表于: 2011-01-07
那就把汉字放到QStingList里,一起就写到文件里了!
QStringList  sl;
sl<<"中文";
再写一个函数;
void write(const QStringList &sl)
{
to write;
}
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线nana_aoe

只看该作者 11楼 发表于: 2011-01-07
回 10楼(jdwx) 的帖子
现在出现一个比较怪的问题,我输入内容为
中文-》英文,没有问题,
中文-》英文-》中文,就乱码了,
也就是说在中文后面如果出现英文,此时中文乱码。
离线XChinux

只看该作者 12楼 发表于: 2011-01-09
你的源代码是什么编码的?和main中设置的编码是否一致?
问题所在大家都说明了,还有问题,那你就把代码贴上来吧。否则无法继续诊断了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线nana_aoe

只看该作者 13楼 发表于: 2011-01-09
回 12楼(XChinux) 的帖子
谢谢关心了,我将编码统一为UTF-8了,一切ok
快速回复
限100 字节
 
上一个 下一个