引用第6楼xiongyu于2010-07-09 13:05发表的 :
是啊,键值是中文正常。
段名和节点就是乱码了。
我就想解决这个问题额

首先,这个不叫乱码,Qt设计上就是这么处理的(如果有兴趣,不妨认真看看源码中的函数)
题外:
所谓乱码,是写入和读出时编码不一致造成的。比如你的一个包含中文的文件采用的是utf8编码,当你用仅支持gbk的编辑器打开,看到乱七八糟的字符,那个叫乱码。
这儿显然没这个问题。
这儿只不过对除下面蓝字外的字符都进行了转义处理。
void QSettingsPrivate::iniEscapedKey(const QString &key, QByteArray &result)
{
result.reserve(result.length() + key.length() * 3 / 2);
for (int i = 0; i < key.size(); ++i) {
uint ch = key.at(i).unicode();
if (ch == '/') {
result += '\\';
} else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9')
|| ch == '_' || ch == '-' || ch == '.') {
result += (char)ch;
} else if (ch <= 0xFF) {
result += '%';
result += hexDigits[ch / 16];
result += hexDigits[ch % 16];
} else {
result += "%U";
QByteArray hexCode;
for (int i = 0; i < 4; ++i) {
hexCode.prepend(hexDigits[ch % 16]);
ch >>= 4;
}
result += hexCode;
}
}
}
当然,如果你非要实现你的功能,你可以修改QSettings 的源码。最好的方法是 使用 QSettings 的manual提到的方式,去定义自己的format
- Format QSettings::registerFormat ( const QString & extension, ReadFunc readFunc, WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive ) [static]