首先,我用的平台是windows10,目标机器是xp。
我在写一个需要兼容 ANSI 编码的QT小程序的时候,遇到了比较奇怪的问题。
首先,代码读取文件,储存到QStringList
再输出到控制台或读取后直接输出到控制台都是没问题的,但是在窗口中显示却是乱码。
下面列出相关文件和代码
config.txt ANSI编码
新版
旧版
在QT项目中的代码
QStringList verList;
QFile configFile ("config.txt");
if(configFile.open(QFile::ReadOnly | QIODevice::Text)) {
while (!configFile.atEnd()) {
QString readLine = configFile.readLine();
std::cout << readLine.toLocal8Bit().constData();
verList << readLine;
}
}
std::cout << std::endl;
for (int i = 0; i < verList.size(); i++) {
std::cout << verList.at(i).toLocal8Bit().constData();
}
……
……
verSelector = new QComboBox(this);
verSelector->setEditable(false);
for (int i = 0; i < verList.size(); i++) {
verSelector->insertItem(i, tr( verList.at(i).toLocal8Bit().constData() ));
}
还请熟悉QT开发的大佬指教……
谷歌查了很多都还没有解决。
你貌似有一件事搞反了。
文件是ANSI编码,这其实就是 Windows 的 System' local encoding 了。那么你从 ANSI 读到 QString 的过程,不是
toLocal8Bit
,而是fromLocal8Bit
。搞明白这件事,乱码问题就迎刃而解了。
把
改为:
把后面那些
toLocal8Bit
都给去掉就行了。