我用QSettins讀寫ini文件,用下面語(yǔ)句:
QString srvName=item->text(0); // 從一個(gè)QTreeWidgetItem讀文本,中文。
configIni->setValue("server/name", srvName);
發(fā)現(xiàn)寫入ini文件中的都是類似于\xc738b\x514b\x950b這樣的東西,(這三個(gè)應(yīng)該對(duì)應(yīng)于我要寫入的三個(gè)中文字)。
這樣做以后,讀取的時(shí)候不能正常解析。
于是我這樣做:
QByteArray strBytes=srvName.toLocal8Bit();
configIni->setValue("server/name",strBytes);
這樣的話,ini文件里這樣記錄:
name=@ByteArray(\xcd\xf5\xba\xa3\xbe\xfc)
在讀入時(shí),我這樣:
QByteArray nameBytes=configIni->value("server/name").toByteArray();
QTextCode * codec=QTextCodec::codeForLocale();
QString name=codec->toUnicode(nameBytes);
可正常解析出中文。
問(wèn)題是,一來(lái)在ini中記錄一串古怪的字符串實(shí)在不爽,二來(lái)如果別的非QT程序讀取同一個(gè)ini肯定會(huì)有問(wèn)題。
歡迎討論。我的環(huán)境:qt 4.3.0 window xp, visual studio 2003中文版
另外,看了帶的例子:setting editor
發(fā)現(xiàn),如果在ini文件中有中文時(shí),
例如ini文件有這樣一行:
servername=謝謝你,然后用這個(gè)例子程序打開,顯示
servername QString ллÄã
顯示會(huì)不正常,然后我試著把亂碼,修改為中文串“幫幫忙”,顯示正常。保存后再看:
servername=\x5e2e\x5e2e\x5fd9
然后再打開:
servername QString 幫幫忙
暈!
posted on 2007-10-26 03:16
清源游民 閱讀(8311)
評(píng)論(6) 編輯 收藏 引用 所屬分類:
Qt