我用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
清源游民 閱讀(8276)
評論(6) 編輯 收藏 引用 所屬分類:
Qt