代码如下:
QFile file(filepath + "/" + filename);
if (file.open(QIODevice::ReadOnly | QIODevice::Text)){
auto res = file.readAll();
QString s1(res);
auto list1 = s1.split("\n");
foreach(QString m, list1){
auto ary1 = CcsvHelper::explainCSVRow(m);
map.insert(ary1[0], ary1[1]);
}
}file.readAll()报“ <字符串中的字符无效。>”
勇哥试着把这个含有汉字的txt的编码改为utf-8,就没有报这个错误,读取成功了。
证明这个问题跟要读取文本的字符集编码有关系。
改为流方式读取就成功了,因为有机会设置输入流的编码方式。
QFile file(filepath + "/" + filename);
if (file.open(QIODevice::ReadOnly | QIODevice::Text)){
QTextStream in(&file);
in.setCodec("UTF-8");
auto res = in.readAll();
/* auto res = file.readAll();
QString s1(res);*/
auto list1 = res.split("\n");
foreach(QString m, list1){
auto ary1 = CcsvHelper::explainCSVRow(m);
map.insert(ary1[0], ary1[1]);
}
}总结一下两种方式读取字符,并转码。
1.QFile直接读
QTextCodec *codec = QTextCodec::codecForName("utf-8");
QFile file(filename);
file.open(QIODevice::ReadOnly);
QByteArray arr = file.readLine();
QString str = codec->toUnicode(arr);2.使用QFile+QTextStream
QFile file(filename);
file.open(QIODevice::ReadOnly);
QTextStream in(&file);
in.setCodec("UTF-8");
QString str;
in >> str;---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!