从NT向solaris 8移植C/C++应用

从NT向solaris 8移植C/C++应用

客户端:WINDOWS2000/XP

服务端:NT/SOLARIS/AIX

最近在向solaris 8中移植应用(服务端应用),遇到的问题还不少。

该应用涉及到的东东有:

IBM MQ530相关,TUXEDO8.0  Xeces-c2.4  iconv  zlib

 

问题一:

TUXEDO FML中的中文返回前端是乱码。但同样的代码在NT下没有问题。

说明:

在该系统中,服务端会将TUXEDOFML转化为XML再以UTF-8的编码转到客户端,按常理,只要返回前端是的UTF-8的字符编码,应该没问题,因此先查返到前端的中文数据,发现果然不是UTF-8,后再服务端单独拿Xerces做实验,发现它的确有问题,因为当时服务端的本地编码应是GBK,但Xerces本身并不支持GBK,因此,把本地编码转成UTF-8时变得乱七八糟,后来用一种最快的方法解决了该问题,不用解析器,而是直接拼字符串,代码也不会很复杂,拼完后用iconv转成UTF-8即可。

 

问题二:

客户端的中文到服务端TUXEDO端后也是乱码

说明:

该问题其实与上面的问题是一样的,但处理却有很大不同,首先,由于前端XML数据复杂,因此必须选用解析器也不能靠自己去解析,其次,Xerces应该可以正常解析UTF-8XML文档,为什么出来得不到UTF-8呢?原因是当从DOM中取得XMLCh型的字符串时,还要调用XMLString::transcode方法得到char *,但这过程中Xerces却自作聪明的想转成本地编码,结果转出来的东西乱七八糟不能使用,解决方法是从XMLChXMLFormatter直接让其输出UTF-8的字符串,再用iconv转成本地编码压入到FML。(从XMLChUTF-8char *应该有比我更好的方法,欢迎指教)

 

问题三:

一运行到使用vector处便core dump!

说明:

试图pushvector的类型是一个结构体,大体如下:

struct a{

string a1;

string a2

}

后经查,在对结构体赋植前,对其进行了memset操作,类似:

memset(a, 0, sizeof(a));

去掉该操作后,一切正常,原因是,结构体内有复杂类型,应在构造函数中初始化才是安全的,但这些代码在NT下正常。

 

问题四:

压入FML内的数据出来后变成了0

说明:

原因是在Fadd时,该字段其实是short型,但却压入了一个int型,但FML的操作中只是压入了最初的两个字节,取出来时当然也只有最初压入的两个字节,这种代码在字节序不同的机器上运行的结果是不一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值