国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Windows編程入門-字符編碼

2019-11-14 11:06:37
字體:
供稿:網(wǎng)友
Windows編程經(jīng)常會遇到各種字符集,其中ANSI和Unicode是最常用的。1、ANSI(多字節(jié)字符集,又稱MBCS)
為了擴充ASCII編碼,以用于顯示本國的語言,不同的國家和地區(qū)制定了不同的標(biāo)準(zhǔn),由此產(chǎn)生了 GB2312, BIG5, JIS 等各自的編碼標(biāo)準(zhǔn)。這些使用 2 個字節(jié)來代表一個字符的各種漢字延伸編碼方式,稱為 ANSI 編碼,又稱為"MBCS(Muilti-Bytes Charecter Set,多字節(jié)字符集)"。在簡體中文系統(tǒng)下,ANSI 編碼代表 GB2312 編碼,在日文操作系統(tǒng)下,ANSI 編碼代表 JIS 編碼,所以在中文 windows下要轉(zhuǎn)碼成gb2312,gbk只需要把文本保存為ANSI 編碼即可。 不同 ANSI 編碼之間互不兼容,當(dāng)信息在國際間交流時,無法將屬于兩種語言的文字,存儲在同一段 ANSI 編碼的文本中。一個很大的缺點是,同一個編碼值,在不同的編碼體系里代表著不同的字。這樣就容易造成混亂。導(dǎo)致了unicode碼的誕生。其中每個語言下的ANSI編碼,都有一套一對一的編碼轉(zhuǎn)換器,Unicode變成所有編碼轉(zhuǎn)換的中間介質(zhì)。所有的編碼都有一個轉(zhuǎn)換器可以轉(zhuǎn)換到Unicode,而Unicode也可以轉(zhuǎn)換到其他所有的編碼。ANSI保存英文字符采用1個字節(jié),保存非英文字符采用2個字節(jié)。2、Unicode
Windows系統(tǒng)采用的Unicode字符集指的是兩個字節(jié)表示一個字符即UTF-16。UTF-8互聯(lián)網(wǎng)的普及,強烈要求出現(xiàn)一種統(tǒng)一的編碼方式。UTF-8就是在互聯(lián)網(wǎng)上使用最廣的一種Unicode的實現(xiàn)方式。其他實現(xiàn)方式還包括UTF-16(字符用兩個字節(jié)或四個字節(jié)表示)和UTF-32(字符用四個字節(jié)表示),不過在互聯(lián)網(wǎng)上基本不用。重復(fù)一遍,這里的關(guān)系是,UTF-8是Unicode的實現(xiàn)方式之一。UTF-8最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個字節(jié)表示一個符號,根據(jù)不同的符號而變化字節(jié)長度。UTF-8的編碼規(guī)則很簡單,只有二條:1)對于單字節(jié)的符號,字節(jié)的第一位設(shè)為0,后面7位為這個符號的unicode碼。因此對于英語字母,UTF-8編碼和ASCII碼是相同的。2)對于n字節(jié)的符號(n>1),第一個字節(jié)的前n位都設(shè)為1,第n+1位設(shè)為0,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒有提及的二進制位,全部為這個符號的unicode碼。下表總結(jié)了編碼規(guī)則,字母x表示可用編碼的位。Unicode符號范圍 | UTF-8編碼方式(十六進制) | (二進制)------------------------+---------------------------------------------0000 0000-0000 007F | 0xxxxxxx0000 0080-0000 07FF | 110xxxxx 10xxxxxx0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx跟據(jù)上表,解讀UTF-8編碼非常簡單。如果一個字節(jié)的第一位是0,則這個字節(jié)單獨就是一個字符;如果第一位是1,則連續(xù)有多少個1,就表示當(dāng)前字符占用多少個字節(jié)。下面,以漢字"嚴(yán)"為例,演示如何實現(xiàn)UTF-8編碼。已知"嚴(yán)"的unicode是4E25(100111000100101),根據(jù)上表,可以發(fā)現(xiàn)4E25處在第三行的范圍內(nèi)(0000 0800-0000 FFFF),因此"嚴(yán)"的UTF-8編碼需要三個字節(jié),即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,從"嚴(yán)"的最后一個二進制位開始,依次從后向前填入格式中的x,多出的位補0。這樣就得到了,"嚴(yán)"的UTF-8編碼是"11100100 10111000 10100101",轉(zhuǎn)換成十六進制就是E4B8A5。UTF-16UTF-16將每個字符編碼為兩個字節(jié)(或者說16位),windows之所以采用UTF-16,是因為全球各地使用的大部分語言中,每個字符很容易用一個16為值來表示。這樣一來,應(yīng)用程序很容易遍歷字符串并計算出它的長度。但是16位不足以表示某些語言的所有字符,對于這些語言,UTF-16支持使用代理(surrogate),后者是用32位(4個字節(jié))來表示一個字符的一種方式。UTF-32UTF-32將每個字符編碼為4個字節(jié)。實例
打開"記事本"程序Notepad.exe,新建一個文本文件,內(nèi)容就是一個"嚴(yán)"字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8編碼方式保存。然后,用文本編輯軟件UltraEdit中的"十六進制功能",觀察該文件的內(nèi)部編碼方式。1)ANSI:文件的編碼就是兩個字節(jié)"D1 CF",這正是"嚴(yán)"的GB2312編碼,這也暗示GB2312是采用大頭方式存儲的。2)Unicode:編碼是四個字節(jié)"FF FE 25 4E",其中"FF FE"表明是小頭方式存儲,真正的編碼是4E25。3)Unicode big endian:編碼是四個字節(jié)"FE FF 4E 25",其中"FE FF"表明是大頭方式存儲。4)UTF-8:編碼是六個字節(jié)"EF BB BF E4 B8 A5",前三個字節(jié)"EF BB BF"表示這是UTF-8編碼,后三個"E4B8A5"就是"嚴(yán)"的具體編碼,它的存儲順序與編碼順序是一致的。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 孙吴县| 航空| 浦城县| 上杭县| 庄河市| 许昌市| 师宗县| 瓦房店市| 灵山县| 长顺县| 营山县| 图木舒克市| 济阳县| 梁河县| 上思县| 商水县| 综艺| 龙陵县| 沙田区| 勃利县| 高唐县| 万全县| 襄城县| 澄城县| 福泉市| 莱西市| 百色市| 犍为县| 湘阴县| 乌鲁木齐市| 景德镇市| 潍坊市| 三都| 玉树县| 布拖县| 本溪| 尚志市| 沈阳市| 阜平县| 郁南县| 团风县|