少有人走的路

勇哥的工业自动化技术网站

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
版权声明:本文为博主原创文章,转载请附上博文链接!


发表评论:

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

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接

Powered By Z-BlogPHP 1.7.3

Copyright www.skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864