青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

The power of C, the power of MD

A problem is a chance to do your best
posts - 11, comments - 22, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
電信provisioning系統(tǒng)中,常常需要與遠(yuǎn)程服務(wù)器實(shí)時交換一些數(shù)據(jù),以完成用戶的請求。由于簡單對象訪問協(xié)議(Simple Object Access Protocol, SOAP)的流行,許多涉及到第三方的應(yīng)用,我們一般都比較樂意使用SOAP來開發(fā)。不過,由于可能涉及到公司的機(jī)密,本系列教程的開發(fā)實(shí)例盡量采用在網(wǎng)上已經(jīng)公開的Web Service資源。
 
我開發(fā)SOAP應(yīng)用程序已經(jīng)有一定的經(jīng)驗(yàn),在C/C++環(huán)境下一般使用gSOAP,而在Java環(huán)境下一般采用axis2。比較兩者的話,除了開發(fā)語言之外,還是有不少差別,處理中文字符就是其中之一。網(wǎng)上分別搜索一下“axis2 亂碼”和“gSOAP 亂碼”,匹配的結(jié)果是相差很遠(yuǎn)的。Axis2好像比較智能,能夠識別服務(wù)端的字符編碼,這方面的問題也少,而最新版本的gSOAP,很可能還是需要程序員做多很多功夫。
 
在第一節(jié)客戶端的教程中,輸出的中文股票名稱,其實(shí)就是亂碼,不過為了主次之分,當(dāng)時做了特別處理,忽略過去。
 
網(wǎng)上解決gSOAP亂碼的主流方案是,初始化soap對象之后對其設(shè)置SOAP_C_UTFSTRING參數(shù),例如:
        struct soap soap;
        soap_init(&soap);
        soap_set_mode(&soap, SOAP_C_UTFSTRING);
 
但是,單純這樣修改,在某些特定設(shè)置的機(jī)器上可能有效,反正我試過,仍然是亂碼,如下圖。怎么辦呢?
 
 
Linux下有一個字符編碼轉(zhuǎn)換的工具iconv,同時也提供了一套可編程的接口。利用它,就可以測試出來自于服務(wù)端中文字符編碼的類型,從而進(jìn)一步實(shí)現(xiàn)在程序中自動轉(zhuǎn)換編碼。
 
Iconv常用用法是:iconv -t=to_charset -f=from_charset filename
因此,把需要轉(zhuǎn)換編碼的內(nèi)容保存為一個文件,然后執(zhí)行iconv試出需要轉(zhuǎn)換的編碼類型。from­_charset幾乎百分百肯定就是utf8,那么to_charset來來去去就那么幾個,一個個試也很快試出來了。最終得出的結(jié)果是gbk編碼,從而修改客戶端程序以解決亂碼問題。

#include <iconv.h>

#include 
"soapH.h"
#include 
"ChinaStockWebServiceSoap12.nsmap"

#define OUTPUT_LEN 32

int conv_charset(const char *dest, const char *src, char *input, size_t ilen, char *output, size_t olen) {
    iconv_t conv 
= iconv_open(dest, src);
    
if ( conv == (iconv_t) -1 )
        
return -1;
    memset(output, 
0, olen);
    
if ( iconv(conv, &input, &ilen, &output, &olen) )
        
return -1;
    iconv_close(conv);
    
return 0;
}

int main(int argc, char **argv) {
    
if ( argc != 2 && argc != 3 ) {
        printf(
"Usage: %s stock_code [end_point]\n", argv[0]);
        exit(
-1);
    }

    
struct soap soap;
    soap_init(
&soap);
    soap_set_mode(
&soap, SOAP_C_UTFSTRING);

    
struct _ns1__getStockInfoByCode request;
    
struct _ns1__getStockInfoByCodeResponse response;

    request.theStockCode 
= argv[1];
    
char *endpoint = NULL;
    
if ( argc == 3 )
        endpoint 
= argv[2];
    
if ( soap_call___ns3__getStockInfoByCode(&soap, endpoint, NULL, &request, &response) == SOAP_OK ) {
        
int element_counter = response.getStockInfoByCodeResult->__sizestring;
        
int i = 0;
        
for ( i = 0; i < element_counter; i++ ) {
            
switch ( i ) {
                
case 0  : printf("Stock code        : "); break;
                
case 1  : printf("Stock name        : "); break;
                
case 2  : printf("Timestamp         : "); break;
                
case 3  : printf("Latest price      : "); break;
                
case 4  : printf("Closing price T-1 : "); break;
                
case 5  : printf("Opening price     : "); break;
                
case 6  : printf("Ups and downs     : "); break;
                
case 7  : printf("Mininum price     : "); break;
                
case 8  : printf("Maxinum price     : "); break;
                
case 9  : printf("Amount of up/down : "); break;
                
case 10 : printf("Trading volume    : "); break;
                
case 11 : printf("Trading amount    : "); break;
                
case 12 : printf("Buy price         : "); break;
                
case 13 : printf("Sell price        : "); break;
                
case 14 : printf("Agency trans      : "); break;
                
case 15 : printf("Buy  1            : "); break;
                
case 16 : printf("Buy  2            : "); break;
                
case 17 : printf("Buy  3            : "); break;
                
case 18 : printf("Buy  4            : "); break;
                
case 19 : printf("Buy  5            : "); break;
                
case 20 : printf("Sell 1            : "); break;
                
case 21 : printf("Sell 2            : "); break;
                
case 22 : printf("Sell 3            : "); break;
                
case 23 : printf("Sell 4            : "); break;
                
case 24 : printf("Sell 5            : "); break;
                
default : break;
            }
            
//printf("%s\n", response.getStockInfoByCodeResult->string[i]);
            size_t ilen = strlen(response.getStockInfoByCodeResult->string[i]);
            
char output[OUTPUT_LEN];
            
if ( conv_charset("GBK""UTF-8", response.getStockInfoByCodeResult->string[i], ilen, output, OUTPUT_LEN) )
                printf(
"%s\n", response.getStockInfoByCodeResult->string[i]);
            
else
                printf(
"%s\n", output);
        }
    }
    
else {
        soap_print_fault(
&soap, stderr);
    }

    soap_destroy(
&soap);
    soap_end(
&soap);
    soap_done(
&soap);
    
return 0;
}

測試成功,如下圖:
 


http://blog.csdn.net/yui/archive/2010/07/21/5753879.aspx

Feedback

# re: 使用gSOAP開發(fā)實(shí)例(3) iconv解決中文亂碼問題  回復(fù)  更多評論   

2010-08-17 14:05 by 毛毛
樓主試試這里提到的方法:
http://www.cppprog.com/2009/0723/138_2.html

soap sp;
soap_init(&sp);
soap_set_mode(&sp, SOAP_C_UTFSTRING);
sp.mode |= SOAP_C_UTFSTRING; //多加一句這個

# re: 使用gSOAP開發(fā)實(shí)例(3) iconv解決中文亂碼問題  回復(fù)  更多評論   

2010-08-17 14:52 by roy
@毛毛

謝謝你,不過我寫本節(jié)之前已經(jīng)試過了,不OK

# re: 使用gSOAP開發(fā)實(shí)例(3) iconv解決中文亂碼問題  回復(fù)  更多評論   

2010-08-19 22:14 by 普派
sp.mode |= SOAP_C_UTFSTRING; //多加一句這個

# re: 使用gSOAP開發(fā)實(shí)例(3) iconv解決中文亂碼問題  回復(fù)  更多評論   

2010-08-19 23:32 by roy
@普派

It didn't work. Therefore, I had to find other ways.

# re: 使用gSOAP開發(fā)實(shí)例(3) iconv解決中文亂碼問題  回復(fù)  更多評論   

2010-08-22 20:05 by 毛毛
加了sp.mode |= SOAP_C_UTFSTRING;以后,就是以UTF8來傳送了,也就是說,發(fā)送時我們要轉(zhuǎn)碼成UTF8,收到的數(shù)據(jù)也是UTF8的,要轉(zhuǎn)回本地編碼或UNICODE編碼來輸出。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲毛片在线| 欧美国产日韩一二三区| 欧美精品一区三区在线观看| 亚洲国产婷婷| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美一进一出视频| 欧美一级在线视频| 136国产福利精品导航| 亚洲高清一二三区| 欧美母乳在线| 久久国产精品99国产| 久久国产精品99精品国产| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产精品久久看| 久久精品国产综合精品| 久久一区精品| 亚洲欧美精品伊人久久| 久久久777| 一区二区三区不卡视频在线观看| 亚洲手机成人高清视频| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲精品乱码久久久久久蜜桃91 | 日韩视频中文字幕| 亚洲欧美日韩在线一区| 亚洲国产欧美久久| 亚洲欧美日韩综合一区| 亚洲国产另类精品专区| 亚洲特级片在线| 亚洲国产欧美不卡在线观看| 制服诱惑一区二区| 亚洲精品日韩一| 亚洲欧美资源在线| 亚洲精品国产精品乱码不99按摩 | 久久久成人网| 欧美日韩综合网| 国产综合一区二区| 一区二区欧美激情| 巨乳诱惑日韩免费av| 亚洲欧美国内爽妇网| 乱码第一页成人| 久久精品久久99精品久久| 欧美精品激情在线| 麻豆国产va免费精品高清在线| 亚洲影院高清在线| 亚洲精品久久久久中文字幕欢迎你| 亚洲视频一区在线观看| 亚洲美女在线看| 久久只有精品| 久久视频在线看| 国产精品网曝门| 日韩一级黄色大片| 亚洲精品日韩综合观看成人91| 性色av一区二区三区| 亚洲网站在线观看| 欧美激情va永久在线播放| 另类av一区二区| 国产原创一区二区| 午夜精品999| 欧美一区二区视频在线观看2020| 欧美日韩国产一区二区三区地区| 亚洲国产精品久久久久秋霞不卡 | 一本一本a久久| 欧美精品一区二区三区在线播放| 欧美激情91| 日韩视频在线一区二区三区| 欧美大片免费观看在线观看网站推荐| 乱码第一页成人| 亚洲丁香婷深爱综合| 久热这里只精品99re8久| 欧美激情第3页| 亚洲三级毛片| 欧美乱人伦中文字幕在线| 亚洲国产高清视频| 一本久久精品一区二区| 欧美午夜精品久久久久免费视| 99国产精品视频免费观看一公开| 一本色道久久综合| 国产精品红桃| 午夜天堂精品久久久久| 免费观看亚洲视频大全| 亚洲级视频在线观看免费1级| 欧美成人一区二区三区| 日韩视频―中文字幕| 午夜亚洲性色视频| 在线成人激情| 欧美精品久久99久久在免费线| 一本色道**综合亚洲精品蜜桃冫| 亚洲欧美日韩国产一区二区三区| 国产欧美在线观看| 久久婷婷国产综合精品青草 | 久久久久久网址| 亚洲精品激情| 国产精品你懂的| 久久永久免费| 中文高清一区| 久久综合色8888| 这里只有精品视频在线| 国产日本欧美一区二区| 老司机成人网| 午夜精彩国产免费不卡不顿大片| 欧美高清在线精品一区| 亚洲视频在线观看一区| 女人香蕉久久**毛片精品| 亚洲视频免费在线| 一区二区亚洲精品国产| 欧美日韩国产精品一区| 欧美中文字幕在线观看| 99av国产精品欲麻豆| 麻豆亚洲精品| 新67194成人永久网站| 亚洲人被黑人高潮完整版| 国产午夜精品全部视频在线播放| 欧美国产欧美亚洲国产日韩mv天天看完整| 一区二区三区四区五区在线| 欧美成人国产| 久久国产一区二区| 亚洲无线视频| 亚洲免费观看在线视频| 激情欧美日韩| 国产欧美一区二区三区沐欲| 欧美午夜大胆人体| 女女同性女同一区二区三区91| 午夜日韩激情| 亚洲综合三区| 宅男噜噜噜66一区二区66| 欧美电影在线| 免费在线欧美黄色| 久久米奇亚洲| 久久久91精品国产一区二区三区 | 欧美一区二区观看视频| 一区二区日韩伦理片| 亚洲精品日韩激情在线电影| 欧美成人一区二区在线| 美腿丝袜亚洲色图| 久久乐国产精品| 久久久噜噜噜久久| 久久不射电影网| 欧美一区二区三区另类| 亚洲欧美制服另类日韩| 亚洲一区中文| 亚洲一区二区三区在线| 亚洲专区欧美专区| 亚洲在线成人精品| 亚洲免费在线播放| 亚洲男人第一av网站| 亚洲专区一二三| 欧美一区二区三区电影在线观看| 午夜亚洲福利在线老司机| 欧美一区二区三区的| 久久精品日韩| 免费观看成人鲁鲁鲁鲁鲁视频| 麻豆91精品91久久久的内涵| 欧美成人午夜剧场免费观看| 亚洲国产日韩欧美在线99| 亚洲激情成人在线| 在线亚洲精品福利网址导航| 亚洲小视频在线| 欧美在线免费看| 猛干欧美女孩| 欧美午夜一区二区福利视频| 国产麻豆91精品| 欧美福利影院| 欧美三级在线播放| 国产嫩草影院久久久久| 黄色欧美成人| 一本色道久久综合亚洲精品不卡 | 久久亚洲春色中文字幕| 欧美多人爱爱视频网站| 亚洲人成毛片在线播放女女| 亚洲网站视频| 伊人蜜桃色噜噜激情综合| 欧美性猛交xxxx乱大交蜜桃 | 国产精品稀缺呦系列在线| 国产自产2019最新不卡| 亚洲精品国久久99热| 亚洲自拍另类| 欧美xx视频| 亚洲天堂免费观看| 久久综合99re88久久爱| 欧美亚一区二区| 在线成人av| 午夜视频精品| 亚洲人屁股眼子交8| 亚洲欧美制服另类日韩| 欧美大片第1页| 国外成人在线视频网站| 夜夜嗨av一区二区三区网页| 久久精品夜色噜噜亚洲aⅴ| 亚洲国产日韩欧美在线动漫| 欧美一区日韩一区| 欧美母乳在线| 亚洲国产精品一区二区尤物区| 亚洲资源在线观看| 亚洲第一天堂av| 欧美专区福利在线| 国产精品久久久久久久久久直播 | 亚洲免费在线视频| 亚洲国产一区二区精品专区| 欧美在线|欧美| 国产精品久久久久久久久婷婷|