QFile.readAll()报“字符串中的字符无效。 ”

代码如下:

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,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864