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,所以就不需要再转了。(思路要清晰,依据实际情况改动)

问题根本原因很简单:借用网友的一张图:
在这里插入图片描述
除此之外,还需要留意一个细节,iconv函数格式转换时,输出长度需要实际长度的两倍(不一定保证正确,本人实际调试调用时是情况,有可能本人有误解)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值