問題產(chǎn)生: 使用gsoap時,如果WebService服務端及客戶調(diào)用端都使用 C++ , 再傳遞中文時不會存在亂碼問題, 當客戶端為 C++ ,WebService服務端使用Java、domino,傳遞中文則會有亂碼問題。
產(chǎn)生原因:
寬字符的原因
解決辦法(一):
在程序中首先設置本地代碼頁
vista 操作系統(tǒng):
setlocal(LC_ALL,"Chinese");
soap_set_mode(soap,SOAP_C_MBSTRING);
windowsxp 操作系統(tǒng):
setlocal(LC_ALL,"chs");
soap_set_mode(soap,SOAP_C_MBSTRING);
解決方法(二)
1. 使用 wsdl2h.exe 通過wsdl描述文件創(chuàng)建C++頭文件(test.h);
2. 將頭文件(test.h)中 std:string* 使用wchar_t* 替換;
3. 使用 soapcpp2.exe -i test.h ,生成相關的cpp及h文件
4. 使用 C++ 時,需要將接收的wchar_t類型數(shù)據(jù)轉(zhuǎn)換為char, 使用WideCharToMultiByte函數(shù)
后續(xù):
soap在對字符編碼轉(zhuǎn)換時,調(diào)用 wctomb 函數(shù),該函數(shù)的調(diào)用在 stdcoap2.cpp 文件中,代碼調(diào)試跟蹤至此,查看 該函數(shù)的返回值是否正確,-1表示字符集設置不正確。
本文轉(zhuǎn)自:http://wenhaidongke.blog.163.com/blog/static/128070090200982313655668/
posted on 2013-08-29 19:57
王海光 閱讀(2811)
評論(0) 編輯 收藏 引用 所屬分類:
C++