tinyxml库myDoc->LoadFile()报错可能原因以及3种解决方案

记录一下遇到的坑
由于tinyxml中返回值没有错误代码,函数bool TiXmlDocument::LoadFile( TiXmlEncoding encoding )返回值是bool没有错误代码,导致问题不好找。
目前遇到的主要有3个可能原因。

1.文件名写错

TiXmlDocument* myDoc = new TiXmlDocument(fileName.c_str());
需要检查fileName是否真的存在,复制粘贴错误等低级错误。
另外就是项目当前工作路径是否在你认为的路径下,即:在使用相对路径在拼接时是不是出问题了。

2.文件格式问题

文件路径没问题之后就要检查是不是xml格式有问题。
目测一下或者使用在线网站把文件放进去试试。
在线网站可以点这里
类似网站有很多,一般格式有问题会提示错误位置。改好就可以。

3.隐藏坑-编码

最后是遇到的究极隐藏坑!找了好几个在线网站查了xml格式都没有问题,但是LoadFile()就是报错。最后找到的原因是和编码有关系。key,value中有汉字的时候才会出现,并且在线检查没有编码格式是检查不出来的,很坑。

起因是开始文件是用txt格式打开且保存过,文件->另存为,格式选择ANSI,这样再读取的时候就成功了。
在这里插入图片描述注意:方法3不一定有用,当时也试了其他编码格式utf-8、utf-16be等。也不好用。
实在不行把key,value换成英文吧。
建议:别用txt打开xml,尤其别保存。
如果修改文件编码格式不管用,可以尝试代码里修改读取文件时的编码
代码如下:

//1
myDoc->LoadFile(TIXML_ENCODING_LEGACY);
//2
myDoc->LoadFile(TIXML_ENCODING_UTF8);

上面两种方法直接指定加载文件时读取模式,如果文件语法没什么问题的话一般就能解决了。
另外推荐一下参考文章
tinyxml解析UTF-8字符集的xml
http://skew.org/xml/tutorial

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值