我用QSettins读写ini文件,用下面语句:
QString srvName=item->text(0); // 从一个QTreeWidgetItem读文本,中文。
configIni->setValue("server/name", srvName);
发现写入ini文件中的都是类似于\xc738b\x514b\x950b这样的东西,(这三个应该对应于我要写入的三个中文字)。
这样做以后,读取的时候不能正常解析。
于是我这样做:
QByteArray strBytes=srvName.toLocal8Bit();
configIni->setValue("server/name",strBytes);
这样的话,ini文件里这样记录:
name=@ByteArray(\xcd\xf5\xba\xa3\xbe\xfc)
在读入时,我这样:
QByteArray nameBytes=configIni->value("server/name").toByteArray();
QTextCode * codec=QTextCodec::codeForLocale();
QString name=codec->toUnicode(nameBytes);
可正常解析出中文。
问题是,一来在ini中记录一串古怪的字符串实在不爽,二来如果别的非QT程序读取同一个ini肯定会有问题。
欢迎讨论。我的环境:qt 4.3.0 window xp, visual studio 2003中文版
另外,看了带的例子:setting editor
发现,如果在ini文件中有中文时,
例如ini文件有这样一行:
servername=谢谢你,然后用这个例子程序打开,显示
servername QString ллÄã
显示会不正常,然后我试着把乱码,修改为中文串“帮帮忙”,显示正常。保存后再看:
servername=\x5e2e\x5e2e\x5fd9
然后再打开:
servername QString 帮帮忙
晕!
posted on 2007-10-26 03:16
清源游民 阅读(8180)
评论(6) 编辑 收藏 引用 所属分类:
Qt