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

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

寬字符和窄字符的一個坑

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

學習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
精品在线小视频| 91国产在线精品| 成人精品一区二区三区| 亚洲欧洲第一视频| 一区二区三区国产在线观看| 欧美日韩高清在线观看| 亚洲美女在线观看| 午夜免费在线观看精品视频| 日韩在线www| 2019亚洲日韩新视频| 欧美性黄网官网| 一本色道久久综合狠狠躁篇怎么玩| 欧美日韩国产在线播放| 日韩欧美在线观看视频| 国产欧美日韩亚洲精品| 国产精品香蕉在线观看| 亚洲风情亚aⅴ在线发布| 国产精品都在这里| 日韩精品免费一线在线观看| 日韩中文字幕在线免费观看| 欧美黑人一区二区三区| 国产成人精品最新| 国产精品 欧美在线| 日韩欧美在线看| 色悠悠久久久久| 亚洲国产一区二区三区在线观看| 91精品国产色综合久久不卡98口| 欧美亚洲第一区| 国产精品久久在线观看| 青青草原成人在线视频| 91亚洲精品在线| 国产精品日韩在线播放| 欧美激情视频网| 色哟哟网站入口亚洲精品| 精品久久在线播放| 久久精品视频亚洲| 中文国产成人精品久久一| 欧美性xxxxx| 亚洲欧美国产日韩中文字幕| 国内精品400部情侣激情| 久久男人av资源网站| 亚洲大胆人体av| 亚洲欧洲黄色网| 国产精品久久久久久久久久| 国产区精品在线观看| 精品自拍视频在线观看| 成人美女免费网站视频| 国产综合在线观看视频| 中文字幕在线观看日韩| 最近2019年日本中文免费字幕| 大胆人体色综合| 欧美电影在线播放| 51精品在线观看| 国产午夜精品理论片a级探花| 亚洲毛片在线看| 亚洲最大福利网站| 日本三级韩国三级久久| 日本一欧美一欧美一亚洲视频| 亚洲香蕉伊综合在人在线视看| 热久久这里只有精品| 成人做爰www免费看视频网站| 日韩电影在线观看免费| 国产成人精品久久| 亚洲精品网址在线观看| 久久精品国产一区二区三区| 日本精品免费观看| 久久久久女教师免费一区| 国产精品入口日韩视频大尺度| 亚洲精品成人久久电影| 亚洲精品wwwww| 2019国产精品自在线拍国产不卡| 日韩av片免费在线观看| 亚洲国产欧美日韩精品| 久久久女女女女999久久| 国产一区二区三区在线| 欧美日韩亚洲视频| 狠狠综合久久av一区二区小说| 亚洲free嫩bbb| 久久琪琪电影院| 欧洲精品在线视频| 青青草精品毛片| 欧美亚洲午夜视频在线观看| 欧美精品在线观看91| 国产欧美一区二区三区久久人妖| 色爱av美腿丝袜综合粉嫩av| 蜜臀久久99精品久久久无需会员| 97超级碰在线看视频免费在线看| 久久精品国产久精国产一老狼| 青青久久aⅴ北条麻妃| 欧美在线一区二区视频| 97视频免费在线看| 欧美日韩国产综合视频在线观看中文| 综合激情国产一区| 国产精品美女主播| 亚洲福利精品在线| 久久精视频免费在线久久完整在线看| 欧美猛少妇色xxxxx| 久久精品久久久久久国产 免费| 自拍偷拍亚洲精品| 久久国产精品久久久久久| 国产成人一区二区三区电影| 日韩视频免费在线| 国产成人在线精品| 欧美另类极品videosbestfree| 国产精品99导航| 97国产真实伦对白精彩视频8| 青青a在线精品免费观看| 国产色综合天天综合网| 亚洲毛茸茸少妇高潮呻吟| 高清一区二区三区四区五区| 北条麻妃一区二区在线观看| 成人av在线网址| 91久久久国产精品| 中文日韩在线观看| 日韩精品亚洲视频| 在线看国产精品| 久久这里有精品视频| 庆余年2免费日韩剧观看大牛| 欧美大片大片在线播放| 欧美人与性动交a欧美精品| 日韩在线视频观看正片免费网站| 欧美激情日韩图片| 国产精品国产三级国产aⅴ浪潮| 国产va免费精品高清在线观看| 成人国产精品色哟哟| 欧美国产日韩一区| 日本高清久久天堂| 国产精品久久久久影院日本| 日韩欧中文字幕| 奇米四色中文综合久久| 日韩欧美在线免费| 欧美黄色片免费观看| 秋霞成人午夜鲁丝一区二区三区| 精品视频久久久久久久| 国产精品高潮呻吟久久av无限| 77777亚洲午夜久久多人| 国产精品欧美风情| 精品中文字幕在线| 国产精品一区二区久久久| 2018中文字幕一区二区三区| 一区二区三区四区视频| 插插插亚洲综合网| 最好看的2019年中文视频| 98精品在线视频| 最近2019中文字幕大全第二页| 亚洲伊人久久大香线蕉av| 国产99视频精品免视看7| 亚洲欧美一区二区三区在线| 国产精品一区二区在线| 色噜噜狠狠狠综合曰曰曰88av| 一区二区在线免费视频| 亚洲第一区第二区| 日韩视频免费中文字幕| 亚洲视频欧洲视频| 国产日本欧美在线观看| 精品视频在线观看日韩| 91精品国产免费久久久久久| 欧美极品欧美精品欧美视频| 人人做人人澡人人爽欧美| 亚洲最大激情中文字幕| 日本精品一区二区三区在线| 欧美电影在线观看高清| 欧美性极品xxxx做受| 91久久久久久久久久久久久|