解决“QString的split()函数分割中文“报错
在使用Qt平台的QString类里的split()函数,分割.txt文件里中文的字符串时,发现中文会乱码。
问题原因:中文使用UTF-16编码。
解决方法:将.txt文件保存为UTF-16编码,然后使用split()去分割对应的字符串即可。
即将要解析的.txt文件其字符编码,改成UTF-16,
比如,UTF-16 LE BOM 或 UTF-16 BE BOM
然后保存即可。
如图(1)所示:

1 解析的中文文件river.txt
比如,要解析的文件为: river.txt,内容如下;
1,长江,6397KM
2,黄河,5465KM
3,珠江,2214KM
2 解析代码
按逗号解析每行数据,并忽略空白行,代码如下:
#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QStringList>
#include <QDebug>
struct RiverInfo {
int id;
QString name;
QString length;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 打开文件
QFile file("river.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "无法打开文件";
return -1;
}
// 用于读取文件内容的文本流
QTextStream in(&file);
QList<RiverInfo> rivers;
// 逐行读取文件内容
while (!in.atEnd()) {
QString line = in.readLine();
line = line.trimmed(); //剔除首部和尾部的空格
if (line.isEmpty()) continue; // 跳过空行
// 按逗号分割行内容
QStringList parts = line.split(',');
if (parts.size() == 3) {
RiverInfo info;
info.id = parts[0].trimmed().toInt();
info.name = parts[1].trimmed();
info.length = parts[2].trimmed();
rivers.append(info);
}
}
// 关闭文件
file.close();
// 输出解析结果
for (const auto& river : rivers) {
qDebug() << "ID:" << river.id << " 名称:" << river.name << " 长度:" << river.length;
}
return a.exec();
}