您好,登錄后才能下訂單哦!
一、字符編碼 詳細(xì)介紹
1.字節(jié)(Byte)是一種計(jì)量單位,他是計(jì)算機(jī)信息技術(shù)存儲容量的一種單位
2.字符的意義: 字符數(shù)計(jì)算機(jī)文字中使用的文字和符號,比如1,2,3,4,~,@,!,%,^等待
3.在不同編碼里字符和字節(jié)對應(yīng)的關(guān)系不同
a.在ASCLL碼中,一個(gè)英文字母(不區(qū)分大小寫)占一個(gè)字節(jié)(8bit),一個(gè)漢子占兩個(gè)字節(jié)(16bit)
b.UTF-8編碼中,一個(gè)英文字符等于一個(gè)字節(jié),一個(gè)中文(含繁體)等于三個(gè)字節(jié)
c.在Unicode編碼中,一個(gè)英文兩個(gè)字節(jié), 一個(gè)中文(含繁體)占兩個(gè)字節(jié)
d.英文符號占一個(gè)字節(jié),中文符號占兩個(gè)字節(jié)
4.多字符集 : 各國文字編碼喲重疊的編碼(編碼沖突)導(dǎo)致亂碼
a.最開始,internet上只有一種字符集------ANS的ASCLL字符集,他用7bits表示一個(gè)字符,
總共表示128個(gè)字符,包括英文字母,數(shù)字,標(biāo)點(diǎn)符號,之后進(jìn)行擴(kuò)展,使用8bits表示一個(gè)字符
可以表示256個(gè)字符, 再原來的7bits基礎(chǔ)上加入了一些特殊字符.
b.后來各國語音的加入,ASCLL已經(jīng)不能滿足需求,各國都在ASCLL的基礎(chǔ)上制定了自己的
字符集, 這些從ANSL標(biāo)準(zhǔn)派生的字符集被習(xí)慣的稱為ANSL字符集
正式名稱MBCS(Multi-Byte Chactacter System,即多字節(jié)字符系統(tǒng)),每種語言都有自己的字符集
導(dǎo)致各種字符集實(shí)在太多,在國際交流中非常不便, 因此提出了Unicode字符集,
它固定使用16 bits(兩個(gè)字節(jié)、一個(gè)字)來表示一個(gè)字符,共可以表示65535個(gè)字符,將世界上
所有語音常用字符都收錄其中,(Unicode標(biāo)準(zhǔn)稱為UTF-16),后來為了能使雙字節(jié)的Unicode
能夠在現(xiàn)存的處理單字節(jié)系統(tǒng)上正確傳輸,出現(xiàn)了UTF-8,使用MBCS的方式對Unicode進(jìn)行編碼.
UTF-8是編碼,它屬于Unicode字符集,
5.Windows定義了一些數(shù)據(jù)類型
a.wchar_t 就是兩個(gè)字節(jié) 帶有W的都是這個(gè)類型
b.WCHAR Unicode字符 他其實(shí)就是wchar_t
c.PWSTR 指向Unicode字符串的指針 wchar_t *
d.PCWSTR 指向一個(gè)常量的Unicode const wchar_t *
e.對應(yīng)多字節(jié)的類型為 CHAR,LPSTR,LPCSTR
f.ASNL/Unicode通用數(shù)據(jù)類型,
TCAHR 多字符集中為char, Unicode中為wchar_t
PTSTR 多字符集中為char *, Unicode中為wchar_t *
LPCTSTR 多字符集中為const char *, Unicode中為const wchar_t *
f.帶有A就是多字符集, W就是Unicode(款字符),T就是通用的
7.Windows中多字符集和Unicode相互轉(zhuǎn)化的API
a.WideCharToMultiByte 映射一個(gè)Unicode字符串到多字節(jié)字符串
b.MultiByteToWideChar 映射一個(gè)多字節(jié)字符串到Unicode字符串
8.函數(shù) 使用上面的函數(shù)比較復(fù)雜 則可以使用下面的宏函數(shù)
使用之前要先聲明標(biāo)識符 USES_CONVERSION;
A2W: 將多字節(jié) 轉(zhuǎn) 寬字節(jié)
USES_CONVERSION CString str; char* AChar = "abcdefg"; wchar_t* WChar = A2W(AChar); str = WChar;
W2A: 將款字節(jié) 轉(zhuǎn) 多字節(jié)
USES_CONVERSION; wchar_t* AChar = L"abcdefg啊"; char* WChar = W2A(AChar);
T2A: T代表跟隨系統(tǒng) 轉(zhuǎn) 多字節(jié)
USES_CONVERSION; char * pChar="char to cstring"; CString cTemp=A2T(pChar);
T2W: 系統(tǒng)類型 轉(zhuǎn) 款字節(jié)
SES_CONVERSION; CString cTemp =_T("char to cstring"); char * pChar=A2T(pChar);
9.謹(jǐn)慎使用上面的宏函數(shù)轉(zhuǎn)換
a.如果你在一個(gè)循環(huán)里使用這個(gè)函數(shù) 可能會引起堆棧溢出
因?yàn)槟悴榭创a發(fā)現(xiàn)他函數(shù)里面會調(diào)用alloc申請內(nèi)存,他會在函數(shù)的棧中分配,
VC編譯器默認(rèn)是2M,在一個(gè)循環(huán)中調(diào)用這個(gè)函數(shù)就會一直分配內(nèi)存.
b.解決辦法最好是使用 WideCharToMultiByte MultiByteToWideChar
這兩個(gè)API, 把這兩個(gè)API封裝一下, 使用就很方便了.
10.使用THAR _TEXT 可以同時(shí)適應(yīng)Unicode和多字節(jié)字符集
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。