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

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
數(shù)據(jù)加載中……

VC/C++的中文字符處理方式

怎樣把漢字轉(zhuǎn)換成整數(shù),又怎樣把該整數(shù)還原成漢字

char * str="漢字";BYTE *pstr=(BYTE*)str;BYTE B=pstr[i];B 就是整數(shù)

一 引入問(wèn)題

代碼 wchar_t a[3]=L”中國(guó),編譯時(shí)出錯(cuò),出錯(cuò)信息為:數(shù)組越界。但wchar_t 是一個(gè)寬字節(jié)類型,數(shù)組a的大小應(yīng)為6個(gè)字節(jié),而兩個(gè)漢字的的unicode碼占4個(gè)字節(jié),再加上一個(gè)結(jié)束符,最多6個(gè)字節(jié),所以應(yīng)該不會(huì)越界。

難道是編譯器出問(wèn)題了?

二 解決引入問(wèn)題所需的知識(shí)

   主要需兩方面的知識(shí),第一個(gè)為字符尤其是漢字的編碼,以及語(yǔ)言和工具的支持情況,第二個(gè)是vc/c++MutiByte Charater Set Wide Character Set有關(guān)內(nèi)存分配的情況。

三 漢字的編碼方式及在vc/c++中的處理

1.漢字編碼方式的介紹

對(duì)英文字符的處理,7ASCII碼字符集中的字符即可滿足使用需求,且英文字符在計(jì)算機(jī)上的輸入及輸出也非常簡(jiǎn)單,因此,英文字符的輸入、存儲(chǔ)、內(nèi)部處理和輸出都可以只用同一個(gè)編碼(如ASCII碼)。

而漢字是一種象形文字,字?jǐn)?shù)極多(現(xiàn)代漢字中僅常用字就有六、七千個(gè),總字?jǐn)?shù)高達(dá)5萬(wàn)個(gè)以上),且字形復(fù)雜,每一個(gè)漢字都有"音、形、義"三要素,同音字、異體字也很多,這些都給漢字的的計(jì)算機(jī)處理帶來(lái)了很大的困難。要在計(jì)算機(jī)中處理漢字,必須解決以下幾個(gè)問(wèn)題:首先是漢字的輸入,即如何把結(jié)構(gòu)復(fù)雜的方塊漢字輸入到計(jì)算機(jī)中去,這是漢字處理的關(guān)鍵;其次,漢字在計(jì)算機(jī)內(nèi)如何表示和存儲(chǔ)?如何與西文兼容?最后,如何將漢字的處理結(jié)果從計(jì)算機(jī)內(nèi)輸出?

為此,必須將漢字代碼化,即對(duì)漢字進(jìn)行編碼。對(duì)應(yīng)于上述漢字處理過(guò)程中的輸入、內(nèi)部處理及輸出這三個(gè)主要環(huán)節(jié),每一個(gè)漢字的編碼都包括輸入碼、交換碼、內(nèi)部碼和字形碼。在計(jì)算機(jī)的漢字信息處理系統(tǒng)中,處理漢字時(shí)要進(jìn)行如下的代碼轉(zhuǎn)換:輸入碼→交換碼→內(nèi)部碼→字形碼。

(1)輸入碼: 作用是,利用它和現(xiàn)有的標(biāo)準(zhǔn)西文鍵盤結(jié)合來(lái)輸入漢字。輸入碼也稱為外碼。主要?dú)w為四類:

a)      數(shù)字編碼:數(shù)字編碼是用等長(zhǎng)的數(shù)字串為漢字逐一編號(hào),以這個(gè)編號(hào)作為漢字的輸入碼。例如,區(qū)位碼、電報(bào)碼等都屬于數(shù)字編碼。

b)      拼音碼:拼音碼是以漢字的讀音為基礎(chǔ)的輸入辦法。

c)      字形碼:字形碼是以漢字的字形結(jié)構(gòu)為基礎(chǔ)的輸入編碼。例如,五筆字型碼(王碼)。

d)      音形碼:音形碼是兼顧漢字的讀音和字形的輸入編碼。

(2)交換碼:用于漢字外碼和內(nèi)部碼的交換。交換碼的國(guó)家標(biāo)準(zhǔn)代號(hào)為GB2312-80。

(3)內(nèi)部碼:內(nèi)部碼是漢字在計(jì)算機(jī)內(nèi)的基本表示形式,是計(jì)算機(jī)對(duì)漢字進(jìn)行識(shí)別、存儲(chǔ)、處理和傳輸所用的編碼。內(nèi)部碼也是雙字節(jié)編碼,將國(guó)標(biāo)碼兩個(gè)字節(jié)的最高位都置為"1",即轉(zhuǎn)換成漢字的內(nèi)部碼。

(4)字形碼:字形碼是表示漢字字形信息(漢字的結(jié)構(gòu)、形狀、筆劃等)的編碼,用來(lái)實(shí)現(xiàn)計(jì)算機(jī)對(duì)漢字的輸出(顯示、打?。?。

2.VC中漢字的編碼方式

   vc/c++正是采用了GB2312內(nèi)部碼作為漢字的編碼方式,因此vc/c++中的各種輸入輸出方法,如cin/wcin,cout/wcout,scanf/wsanf,printf/wprintf...都是基于GB2312的,如果漢字的內(nèi)碼不是這種編碼方式,那么利用上述各種方法就不會(huì)正確的解析漢字。

仔細(xì)觀察ASCII字符表,從第161個(gè)字符開始,后面的字符并不經(jīng)常為用戶所使用,負(fù)值也未使用。GB2312編碼方式充分利用這一特性,將161-255-95~-1)之間的數(shù)值空間作為漢字的標(biāo)識(shí)碼。既然255-161 = 94不能滿足漢字容量的要求,就將每?jī)蓚€(gè)字符并在一塊(即一個(gè)漢字占兩個(gè)字節(jié)),顯然,94* 94 =8836基本上已經(jīng)滿足了常用漢字個(gè)數(shù)的要求。計(jì)算機(jī)處理字符時(shí),當(dāng)連續(xù)處理到兩個(gè)大與160(-95~-1)的字節(jié)時(shí),就認(rèn)為這兩個(gè)字節(jié)存放了一個(gè)漢字字符。可以用下面的Demo程序來(lái)模擬vc/c++中輸出漢字字符的過(guò)程。

    unsigned char input[50];

cin>>input;

    int flag=0;

    for(int i =0 ;i < 50 ;i++)

    {

       if(input[i] > 0xa0 && input[i] != 0)

       {

           if(flag == 1)

           {

              cout<<"chinese character"<<endl;

              flag = 0;

           }

           else

           {

              flag++;

           }

       }

 

       else if(input[i] == 0)

       {

           break;

       }

       else

       {

           cout<<"english character"<<endl;

       }

}

輸入:Hello中國(guó) (中國(guó)對(duì)應(yīng)的GB2312內(nèi)碼為:214 208,185 250

輸出:english character

english character

english character

english character

english character

chinese character

chinese character

vc/c++中的英文字符仍然采用ASCII編碼方式??梢栽O(shè)想,其他國(guó)家程序員利用vc/c++編寫程序輸入本國(guó)字符時(shí),vc/c++則會(huì)采用該國(guó)的字符編碼方式來(lái)處理這些字符。

    問(wèn)題又產(chǎn)生了,韓國(guó)的vc/c++程序在中國(guó)的vc/c++上運(yùn)行時(shí),如果沒有相應(yīng)的內(nèi)碼庫(kù),則對(duì)韓語(yǔ)字符的顯示有可能出現(xiàn)亂碼。我個(gè)人猜測(cè),vc安裝程序中應(yīng)該帶有不同國(guó)家的內(nèi)碼庫(kù),這樣一來(lái)肯定會(huì)占用很大的空間。如果所有的國(guó)家使用統(tǒng)一的編碼方式,且所有的程序設(shè)計(jì)語(yǔ)言和開發(fā)工具都支持這種編碼方式該多好!而現(xiàn)實(shí)中,確實(shí)已經(jīng)有這種編碼方式了,且許多新的語(yǔ)言也都支持這種編碼方式,如Java、C#等,它就是下面的Unicode編碼

3.新的內(nèi)碼標(biāo)準(zhǔn)---Unicode

Unicode(統(tǒng)一碼、萬(wàn)國(guó)碼、單一碼)是一種在計(jì)算機(jī)上使用的字符編碼。它為每種語(yǔ)言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿足跨語(yǔ)言、跨平臺(tái)進(jìn)行文本轉(zhuǎn)換、處理的要求。1990年開始研發(fā),1994年正式公布。隨著計(jì)算機(jī)工作能力的增強(qiáng),Unicode也在面世以來(lái)的十多年里得到普及。最新版本的 Unicode 2005年3月31推出的Unicode 4.1.0 。另外,5.0 Beta已于20051212推出,以供各會(huì)員評(píng)價(jià)。

Unicode 編碼系統(tǒng)可分為編碼方式和實(shí)現(xiàn)方式兩個(gè)層次。

編碼方式:Unicode 的編碼方式與 ISO 10646 的通用字符集(Universal Character Set,UCS)概念相對(duì)應(yīng),目前的用于實(shí)用的 Unicode 版本對(duì)應(yīng)于 UCS-2,使用16位的編碼空間。也就是每個(gè)字符占用2個(gè)字節(jié)。這樣理論上一共最多可以表示 216 個(gè)字符?;緷M足各種語(yǔ)言的使用。實(shí)際上目前版本的 Unicode 尚未填充滿這16位編碼,保留了大量空間作為特殊使用或?qū)?lái)擴(kuò)展。

實(shí)現(xiàn)方式:Unicode 的實(shí)現(xiàn)方式不同于編碼方式。一個(gè)字符的 Unicode 編碼是確定的。但是在實(shí)際傳輸過(guò)程中,由于不同系統(tǒng)平臺(tái)的設(shè)計(jì)不一定一致,以及出于節(jié)省空間的目的,對(duì) Unicode 編碼的實(shí)現(xiàn)方式有所不同。Unicode 的實(shí)現(xiàn)方式稱為Unicode轉(zhuǎn)換格式(Unicode Translation Format,簡(jiǎn)稱為 UTF)。如,UTF-8 編碼,這是一種變長(zhǎng)編碼,它將基本7ASCII字符仍用7位編碼表示,占用一個(gè)字節(jié)(首位補(bǔ)0)。而遇到與其他 Unicode 字符混合的情況,將按一定算法轉(zhuǎn)換,每個(gè)字符使用1-3個(gè)字節(jié)編碼,并利用首位為01進(jìn)行識(shí)別。

JavaC#語(yǔ)言都是采用Unicode編碼方式,在這兩種語(yǔ)言中定義一個(gè)字符,在內(nèi)存中存放的就是這個(gè)字符的兩字節(jié)Unicode碼。如下所示:

char a='';    => 內(nèi)存中存放的Unicode碼為:25105

posted on 2008-11-07 22:39 肥仔 閱讀(1051) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 字符編碼

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美美女喷水视频| 亚洲三级视频| 欧美成人高清| 精品电影在线观看| 老司机成人在线视频| 欧美福利在线| 日韩视频免费在线| 欧美日韩综合在线| 欧美在线视频一区| 亚洲国产精品美女| 亚洲精品国产拍免费91在线| 欧美日本一区二区三区 | 日韩一级黄色av| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 欧美精品日韩| 一二三四社区欧美黄| 国产精品久久久久久久久借妻| 午夜欧美电影在线观看| 蜜臀av国产精品久久久久| 亚洲乱码精品一二三四区日韩在线| 欧美日韩久久| 欧美一区二区三区视频免费| 亚洲国产电影| 欧美一区二区三区视频免费| 亚洲国产电影| 国产婷婷精品| 欧美偷拍另类| 久久一区二区三区av| 中国女人久久久| 亚洲国产高清自拍| 久久久噜噜噜| 亚洲免费视频在线观看| 韩国一区电影| 亚洲国产精品久久91精品| 午夜亚洲伦理| 亚洲美女视频| 亚洲福利在线观看| 国产在线精品自拍| 国产噜噜噜噜噜久久久久久久久| 欧美国产免费| 免费成人性网站| 久久99在线观看| 亚洲欧美日本视频在线观看| 99国产精品99久久久久久粉嫩| 亚洲国产精品999| 欧美黑人多人双交| 欧美大成色www永久网站婷| 欧美专区亚洲专区| 欧美一站二站| 久久动漫亚洲| 久久福利一区| 久久久999精品免费| 欧美一区二区三区免费视| 亚洲欧美日韩国产综合| 亚洲一区二区三区三| 亚洲视频电影图片偷拍一区| 99精品欧美一区二区三区| 亚洲国产精品成人| 亚洲黄色av| 亚洲精品久久久久| 亚洲日本欧美日韩高观看| 亚洲国产一区二区三区青草影视| 狠狠综合久久av一区二区老牛| 国外成人免费视频| 在线免费观看视频一区| 影音先锋国产精品| 伊人久久大香线| 亚洲无毛电影| 亚洲综合另类| 欧美一区二区三区久久精品| 欧美一区二区三区四区视频| 欧美女同视频| 国产精品狠色婷| 国产主播精品| 亚洲国产精品综合| 一二三区精品| 欧美在线综合视频| 美女尤物久久精品| 日韩视频在线观看国产| 亚洲午夜av电影| 久久久久久精| 欧美日韩国产二区| 国产日韩亚洲| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲精品视频在线看| 亚洲性夜色噜噜噜7777| 羞羞答答国产精品www一本| 久久免费精品视频| 欧美精品一区二| 国产精品久久久久久久第一福利 | 老司机成人在线视频| 欧美四级电影网站| 一区二区在线免费观看| 日韩亚洲欧美一区| 久久精品在线| 99精品福利视频| 久久九九热re6这里有精品| 欧美另类极品videosbest最新版本| 国产精品a久久久久| 在线不卡中文字幕| 亚洲女人天堂av| 欧美插天视频在线播放| 亚洲欧美日本另类| 欧美精品乱人伦久久久久久 | 六月天综合网| 亚洲性图久久| 欧美日韩国产色综合一二三四| 国产一区二区三区四区hd| 国产精品99久久久久久久女警| 欧美91视频| 久久er精品视频| 亚洲第一在线视频| 亚洲欧美日韩在线高清直播| 欧美日韩在线播放一区二区| 精品动漫3d一区二区三区| 欧美在线视频全部完| 一区二区不卡在线视频 午夜欧美不卡' | 亚洲综合色婷婷| 亚洲国产成人高清精品| 久久精品噜噜噜成人av农村| 欧美性猛片xxxx免费看久爱| 亚洲精选大片| 欧美激情小视频| 久久久欧美精品sm网站| 国产香蕉久久精品综合网| 亚洲男人的天堂在线| 99热这里只有成人精品国产| 欧美另类人妖| 一区二区三区高清不卡| 亚洲国产精品一区二区www| 美女免费视频一区| 一区二区在线观看av| 欧美gay视频| 欧美成人一区二免费视频软件| 在线观看视频免费一区二区三区| 久久嫩草精品久久久久| 欧美专区亚洲专区| 黄色亚洲在线| 乱中年女人伦av一区二区| 久久久久久9| 最新国产乱人伦偷精品免费网站 | 欧美体内谢she精2性欧美| 夜夜嗨av一区二区三区免费区| 亚洲美女福利视频网站| 国产精品第一区| 欧美有码在线视频| 久久9热精品视频| 在线观看欧美视频| 亚洲国产精品一区| 欧美性大战久久久久久久| 亚洲一区二区免费看| 亚洲欧美精品伊人久久| 国产一区二区三区丝袜| 欧美成人高清| 欧美视频在线不卡| 久久久精品一区| 欧美大尺度在线观看| 午夜久久tv| 美女亚洲精品| 亚洲欧美日韩国产综合精品二区| 欧美一区成人| 欧美一区亚洲| 亚洲啪啪91| 亚洲欧美日韩国产成人| 影音先锋国产精品| 亚洲精品系列| 国产一区在线观看视频| 亚洲电影免费在线| 久久精品一二三区| 麻豆精品视频在线观看视频| 可以看av的网站久久看| 亚洲一区免费网站| 久久婷婷人人澡人人喊人人爽| 一区二区三区四区五区精品| 香蕉av777xxx色综合一区| 亚洲电影有码| 亚洲自啪免费| 亚洲精品免费网站| 欧美一区二区三区在线观看视频| 亚洲乱亚洲高清| 欧美制服丝袜| 亚洲欧美视频在线观看视频| 久久伊伊香蕉| 欧美一区亚洲一区| 欧美日韩色综合| 欧美成人a视频| 国产精品一区二区你懂的| 亚洲欧洲美洲综合色网| 国产自产2019最新不卡| 一区二区三区鲁丝不卡| 亚洲电影观看| 欧美一区二粉嫩精品国产一线天| 一本久久a久久免费精品不卡| 久久男女视频| 久久免费视频网| 国产精品一级| 亚洲一区二区日本| 亚洲午夜精品视频| 欧美极品在线播放| 亚洲国产精品激情在线观看|