代码如下:
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
版权声明:本文为博主原创文章,转载请附上博文链接!
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


