技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 1840
|
現(xiàn)行大部分系統(tǒng)采用Unicode編碼Unicode編碼是ASCII碼的擴(kuò)展
Ascii碼使用一個(gè)字節(jié)存儲(chǔ)字符最多能編碼256個(gè)字符,而Unicode編碼采用兩個(gè)字節(jié)存儲(chǔ)字符,最多能編碼65536個(gè)字符,每個(gè)字符都有自己獨(dú)立的編碼。
VB和java內(nèi)部都是是喲個(gè)Unicode編碼的。由于數(shù)字和英文大小寫(xiě)字符都是Ascii字符集,用兩個(gè)字節(jié)存儲(chǔ)一個(gè)字節(jié)的字符有些浪費(fèi),于是為了網(wǎng)絡(luò)傳輸方便,就出現(xiàn)了utf-8編碼、utf-16編碼。
utf-8編碼使用動(dòng)態(tài)長(zhǎng)度編碼字符,對(duì)于ascii碼內(nèi)字段小于128的用一個(gè)字段編碼,其編碼方式如下所示:
下列字節(jié)串用來(lái)表示一個(gè)字符. 用到哪個(gè)串取決于該字符在 Unicode 中的序號(hào).
U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
xxx 的位置由字符編碼數(shù)的二進(jìn)制表示的位填入. 越靠右的 x 具有越少的特殊意義. 只用最短的那個(gè)足夠表達(dá)一個(gè)字符編碼數(shù)的多字節(jié)串. 注意在多字節(jié)串中, 第一個(gè)字節(jié)的開(kāi)頭"1"的數(shù)目就是整個(gè)串中字節(jié)的數(shù)目.
例如: Unicode 字符 U+00A9 = 1010 1001 (版權(quán)符號(hào)) 在 UTF-8 里的編碼為:
11000010 10101001 = 0xC2 0xA9
而字符 U+2260 = 0010 0010 0110 0000 (不等于) 編碼為:
11100010 10001001 10100000 = 0xE2 0x89 0xA0
這樣就大大的提高到磁盤(pán)利用率,提高網(wǎng)絡(luò)傳輸效率。
那么如何獲取字符的Ascii碼呢?
vba用asc("字符")函數(shù)獲取字符的ascii碼,注意:非ascii碼表的字符會(huì)出現(xiàn)負(fù)值情況,建議使用其擴(kuò)展碼表函數(shù):ascw("字符")
對(duì)于大于ascii擴(kuò)展碼表的字符這樣依然會(huì)出現(xiàn)負(fù)值情況,這時(shí)我們用以下函數(shù)直接獲取Unicode碼:CLng("&h"+Hex$(AscW((Mid([Str],1,1)))))
這樣就取得了字符的Unicode碼,然后你就可以將其轉(zhuǎn)成utf-8格式,再轉(zhuǎn)成二進(jìn)制字節(jié)流使用md5或者自定義函數(shù)進(jìn)行加密解密了。
自定義函數(shù)如:
字符二進(jìn)制字節(jié)為:01010001 01010011
你可以進(jìn)行反轉(zhuǎn) :11001010 10001010
替換 :00110101 01110101
穿插 :01001101 11010101
還可以有更多加密操作,比如<<>> mod等等,最后轉(zhuǎn)成字符存儲(chǔ)
就完成了加密,解密過(guò)程相反,這里不再贅述。
大家可以自己動(dòng)手試試,有好的發(fā)現(xiàn)和方法可以和大家交流一下。 |
評(píng)分
-
查看全部評(píng)分
|