最近两天一直纠结一个问题,由字符集引起的字符乱码问题。
程序的结构是,客户端从数据库服务器获取数据,然后将数据打包成xml发送出去。
但是在生成XML的时候,数据中的中文字符全都没有,然后通过一步步的调试输出,发现在调用Xcercs的transcode后,汉字全部都返回了空串;作为一个有着一定使用历史的第三方开源库,显然不太可能存在问题,可是问题到了这,只有想其他存在的可能。于是尝试了将本地Linux系统的编码调整为和数据库服务器一致,但是仍然无法解决问题。
最后纠结了好几天,才想到看看程序这边打印出来的编码是什么样的。
于是,在程序中加入了以下的代码:
char* locName = setlocale(LC_ALL,NULL);
printf("\n-%s-\n",locName);
获取了本地程序集的编码方式,和数据库服务器的编码方式的确不同。
添加以下代码:
setlocale(LC_ALL,"zh_CN.GBK");
重新运行生成,没有问题了,乱码就此解决。
总结,大多数的这种问题都是由于编码方式不一致引起的,可以通过以上的方法进行确定,定位问题后,进行相应的解决。