用ifstream读UTF8格式文件的时候遇到了问题,求解
我要读一个xml文件,是utf8无BOM格式的
方法是先ifstream打开文件用seekg,tellg获得长度
然后构建了一个std::vector<char>,resize到文件长度+1
然后用ifstream的read读取到vector里
我原本文本最后一行是</datasources>
现在在读取的时候发现有问题,就是每有一个换行会多一个char的长度出来
我看了下读到的vector内容,发现换行位置没有\r只有\n,认为是这个影响长度的判断了
而且读出来的vector虽然最后多点长度出来,但是都是\0,
就是类似“...</datasources>\0\0\0\0\0\0\0”,不影响我后续对文本的处理所以也没在意
但是后来随着我更改了读取的文件内容后,发现读取开始有问题了
就是当文本的行数到一定数量后,原本会是\0的部分读取出了重复数据
,结果行数到七八行后,多出来的char长度不是\0了
结尾变成了"...</datasources>asources>\0"
等于多出的长度读出了重复的数据,随着长度加长继续往前读到换行位置还读出了\r
结果我在后续处理文本的时候就报错了
而且比较奇怪的是我在VS2015上编辑的同样代码读换行较多的文件最后也还是\0结尾的
但是我这次下的是QT的MingW版本,就出现了这个问题
有没有大佬知道这是什么问题,应该怎么处理?麻烦告诉下吧,谢谢了。