亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

寬字符和窄字符的一個坑

2019-11-10 17:02:43
字體:
來源:轉載
供稿:網友

學習Windows編程的時候,遇到字符串處理會讓人非常抓狂,當然問題的根本還是自己學藝不精,不過還是得吐槽一下,造成這一局面的原因是規則變化多端而又有點不可捉摸,這不,最近就掉到坑里面去了。

先看看下面的這段代碼:

int main(int argn,char* argv[]){    char strA[]="ABC 簡體中文";    wchar_t strW[]=L"ABC 簡體中文";    PRintf("%s/n",strA);    wprintf(L"%s/n",strW);    return 0;}

猜猜看,輸出是什么?在我的電腦上(程序使用VS2010編譯通過,Windows 7操作系統,簡體中文版)運行的結果是這樣的:

image

第一個還好好地,怎么第二個會出現三個問號?

調試一下試試看,在return 0前面下斷點,然后查看內存:

image

image

這個是strA在內存中的值:41 42 43 20 bc f2 cc e5 d6 d0 ce c4 00

而strW則是:41 00 42 00 43 00 20 00 80 7b 53 4f 2d 4e 87 65 00 00

首先,我們知道char類型占一個字節,而wchar_t則是占兩個字節,前面的41,42,43,20就是分別’A’,’B’,’C’和’ ‘(空格),這里表明,寬字符采用的是Little-Endian方式存放兩個字節的,接下來我們把重點都放在漢字上面。

在strA中,表示漢字“簡體中文”數據為bc f2 cc e5 d6 d0 ce c4,而在strW則是80 7b 53 4f 2d 4e 87 65,差別很大,為什么是這樣呢?

這其中涉及到了編碼的問題。char類型中出現的漢字,采用的是GB2312的編碼規則,查詢該編碼表,可以發現,“簡”字的編碼為BCF2,“體”為CCE5,“中”為D6D0,而“文”則為CEC4,這就是strA中中文的表示方式,但是在寬字符strW中,采用的編碼則是Unicode編碼,在Windows平臺下Unicode編碼值就是UTF-16編碼值。查詢“簡體中文”四個漢字的編碼,可以發現是7B80 4F53 4E2D 6587,由于計算機的架構為Little-Endian,需要把高低位字節互換,這也就是寬字符的表示形式。

根據網頁上的說明(參考這里)C/C++標準只是聲明wchar_t是一個可以表示字符集中的任意一個字符的足夠寬的變量類型。wchar_t可以用任何encoding編碼方式來存儲這個字符,如ANSI、UCS-2或者UCS-4, 甚至是SCU-128,只不過我們通常是用unicode編碼方式。wchar_t是與實現相關的。所以為了可移植性,我們不能假定wchar_t的編碼方式,然后根據編碼方式做一些相關性操作,我們只能理解它為一個足夠寬的字符類型。

最后,我們還能順便發現,wprintf函數在處理文本輸出的時候,并不處理編碼問題,而是直接按多字節字符順序輸出。

好,現在問題的原因找到了,那么該如何解決問題呢?

Windows當然不會沒有想到這個問題,在Windows中,提供了如下兩個函數:WideCharToMultiByte和MultiByteToWideChar,他們都位于頭文件winnls.h中,分別是將寬字符轉化為多字節和將多字節轉化為寬字符。下面的例子直接給出了轉化的代碼,函數的具體使用方法可以翻閱MSDN。

int main(int argn,char* argv[]){    wchar_t strW[]=L"ABC 簡體中文";    char* pW2A;    int t=0;    //第一次,確定需要的字節數    t=WideCharToMultiByte(CP_ACP,0,strW,-1,NULL,0,NULL,FALSE);    if(t!=0)    {        pW2A=(char*)malloc(t);//分配內存,然后運行第二次,注意參數區別        WideCharToMultiByte(CP_ACP,0,strW,-1,pW2A,t,NULL,FALSE);        printf("%s/n",pW2A);        free(pW2A);    }    return 0;}
這回顯示就沒有什么問題了,長舒一口氣,暫時從坑里面爬出來了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美人交a欧美精品| 久久精品久久精品亚洲人| 国产激情久久久| 亚洲aaa激情| 欧美日韩在线一区| 精品在线欧美视频| 欧美一级视频免费在线观看| 姬川优奈aav一区二区| 亚洲美女又黄又爽在线观看| 日日狠狠久久偷偷四色综合免费| 热久久这里只有精品| 91精品在线播放| 欧洲成人午夜免费大片| 中文字幕亚洲图片| 91九色国产社区在线观看| 国产精品a久久久久久| 欧美另类暴力丝袜| 亚洲网在线观看| 色综合久久久久久中文网| 91精品国产九九九久久久亚洲| 成人444kkkk在线观看| 色先锋资源久久综合5566| 国产精品白嫩美女在线观看| 日韩精品有码在线观看| 亚洲一区制服诱惑| 亚洲一区二区三区sesese| 4444欧美成人kkkk| 亚洲va欧美va在线观看| 亚洲欧美中文字幕在线一区| 91精品国产一区| 久久91精品国产| 国产91精品久久久久久| 亚洲国产精品成人精品| 久久夜色精品国产欧美乱| 伊人久久久久久久久久久| 91av成人在线| 午夜精品久久久久久99热软件| 亚洲欧美日韩爽爽影院| 欧美激情视频网址| 成人午夜两性视频| 日韩美女视频中文字幕| 亚洲激情中文字幕| 亚洲激情自拍图| 黄色精品一区二区| 日韩av一区二区在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 欧美在线欧美在线| 高清日韩电视剧大全免费播放在线观看| 最近中文字幕日韩精品| 国产自摸综合网| 亚洲日韩第一页| 69视频在线免费观看| 国产香蕉97碰碰久久人人| 久久久久久久久久久免费精品| 日韩一区二区三区国产| 日韩欧亚中文在线| 日韩欧美亚洲国产一区| 精品自在线视频| 亚洲无亚洲人成网站77777| 亚洲激情久久久| 国产欧美日韩最新| 国产欧美欧洲在线观看| 91精品国产91久久久久久不卡| 亚洲一区亚洲二区亚洲三区| 日韩在线观看免费| 久久网福利资源网站| 日韩经典中文字幕在线观看| 国产午夜精品全部视频播放| 日韩免费在线播放| 8050国产精品久久久久久| 国产精品狼人色视频一区| 欧美成人免费观看| 午夜精品福利电影| 成人午夜在线视频一区| 成人精品久久av网站| 国产精品高潮呻吟久久av黑人| 亚洲精品成人久久久| 久久激情五月丁香伊人| 亚洲精品欧美一区二区三区| 精品国内自产拍在线观看| 欧美巨猛xxxx猛交黑人97人| 国产精品一区二区久久国产| 欧美一性一乱一交一视频| 97视频免费在线看| 亚洲va电影大全| 亚洲国产精品成人va在线观看| 人人爽久久涩噜噜噜网站| 午夜剧场成人观在线视频免费观看| 91丝袜美腿美女视频网站| 色偷偷88888欧美精品久久久| 热久久视久久精品18亚洲精品| 亚洲欧美一区二区三区久久| 国产精品久久综合av爱欲tv| 91a在线视频| 亚洲精品国产福利| 久久视频在线播放| 精品国产一区av| 久久久欧美精品| 亚洲国产精品一区二区三区| 欧美激情视频一区二区三区不卡| 91探花福利精品国产自产在线| 欧美国产在线视频| 热久久免费视频精品| 日韩欧美在线免费观看| 亚洲国模精品一区| www.国产一区| 欧美国产亚洲精品久久久8v| 久久久精品影院| 亚洲精美色品网站| 国产成人高清激情视频在线观看| 欧美黄色成人网| 亚洲精品资源在线| 国产91精品黑色丝袜高跟鞋| 欧美精品精品精品精品免费| 亚洲女人初尝黑人巨大| 久久男人av资源网站| 久久久国产视频| 国产一区在线播放| 亚洲国产精品嫩草影院久久| 91免费视频网站| 亚洲欧美中文字幕| 欧美激情一区二区三区久久久| 日韩亚洲国产中文字幕| 91色琪琪电影亚洲精品久久| 日韩av在线直播| 欧美一级在线亚洲天堂| 久久久精品中文字幕| 国产mv免费观看入口亚洲| 国产精品久久9| 欧美亚洲在线视频| 成人一区二区电影| 国产精品中文久久久久久久| 亚洲区一区二区| 国产精品一区二区av影院萌芽| 国外成人免费在线播放| 久久久久久国产免费| 精品国产精品自拍| 亚州国产精品久久久| 国产噜噜噜噜久久久久久久久| 精品成人69xx.xyz| 国产精品日韩一区| 国产精品黄色av| 亚洲第一网中文字幕| 日韩中文字幕在线| 精品电影在线观看| 日韩精品免费在线播放| 国产成人精品亚洲精品| 国产亚洲欧洲高清| 91亚洲精品一区| 亚洲第五色综合网| 91精品国产乱码久久久久久蜜臀| 国产亚洲精品久久久久久牛牛| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩免费av片在线观看| 亚洲人成电影网站色www| 成人国产亚洲精品a区天堂华泰| 98精品在线视频| 久热精品视频在线免费观看| 成人h视频在线| 不卡av在线播放| 亚洲sss综合天堂久久| 色香阁99久久精品久久久| 国产亚洲一区精品| 久久久成人av|