xml中文乱码解决

问题:
最近和上位机调试时出现一个问题:设备和上位机采用xml报文进行交互(网上也有很多相同的文章,差不多大家都是使用xml时会出现这个问题吧)恢复默认参数,上位机中文显示正常,但是点击保存参数后重新利用上位机获取参数,上位机显示乱码。第一次遇到这种问题,没有经验,费劲的查了好久,有点坑。记录一下,希望其他人遇到相似问题有一个参考,或者通过此文进行一次思路梳理。
要把这个问题搞清楚,你要明确知道一些东西:
1、unicode编码、utf-8编码,它们之间的关系?
2、GB2312编码,为什么有这个东西?GB2312和UTF-8怎么转换,为什么需要转换?
3、设备本地对于中文支持的是什么编码(我设备是gb2312)?输出通过CRT就可以看出来,设置同设备相同时不会打印出乱码,其他情况会出现乱码
在这里插入图片描述
4、上位机或者web支持的是什么编码,把xml报文打印出来,同样使用crt看出来。但是这里需要明确一个问题,也是我本次遇到这个问题的大坑之处,上位机/web下发的是什么编码,上位机/web解析(设备上传的)的又是什么编码格式,这些都是需要明确的,不要想当然,先入为主。
笔者这次就是因为上位机下发xml中中文采用utf-8格式,但是解析的时候又使用gb2312解析(非主流的方式),然后才走了很多的弯路

5、当你明确了上面这些概念和格式之后,剩下的就剩转格式了。网上有很多函数可以参考,像我的奇葩情况大致过程就是:
设备支持gb2312,那对于上位机下发的utf-8的xml报文,先解析xml报文,提取出中文,然后将中文转成自己设备的utf-8,进行保存;
当上位机需要获取的时候,我直接从flash中读取出来,因为我自己本地是gb2312,上位机对于上报的报文解析方式也是gb2312,所以就不需要再转了。(思路要清晰,依据实际情况改动)

问题的原因很简单:借用网友的一张图:
在这里插入图片描述