Office中国论坛/Access中国论坛

标题: 如何获取字符的Unicode编码、Ascii码、及各种编码转换加密解密 [打印本页]

作者: LeeTien    时间: 2011-1-8 15:58
标题: 如何获取字符的Unicode编码、Ascii码、及各种编码转换加密解密
现行大部分系统采用Unicode编码Unicode编码是ASCII码的扩展
Ascii码使用一个字节存储字符最多能编码256个字符,而Unicode编码采用两个字节存储字符,最多能编码65536个字符,每个字符都有自己独立的编码。
VB和java内部都是是哟个Unicode编码的。由于数字和英文大小写字符都是Ascii字符集,用两个字节存储一个字节的字符有些浪费,于是为了网络传输方便,就出现了utf-8编码、utf-16编码。
utf-8编码使用动态长度编码字符,对于ascii码内字段小于128的用一个字段编码,其编码方式如下所示:
下列字节串用来表示一个字符. 用到哪个串取决于该字符在 Unicode 中的序号.

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 的位置由字符编码数的二进制表示的位填入. 越靠右的 x 具有越少的特殊意义. 只用最短的那个足够表达一个字符编码数的多字节串. 注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目.

例如: Unicode 字符 U+00A9 = 1010 1001 (版权符号) 在 UTF-8 里的编码为:

11000010 10101001 = 0xC2 0xA9

而字符 U+2260 = 0010 0010 0110 0000 (不等于) 编码为:

11100010 10001001 10100000 = 0xE2 0x89 0xA0

这样就大大的提高到磁盘利用率,提高网络传输效率。


那么如何获取字符的Ascii码呢?
vba用asc("字符")函数获取字符的ascii码,注意:非ascii码表的字符会出现负值情况,建议使用其扩展码表函数:ascw("字符")
对于大于ascii扩展码表的字符这样依然会出现负值情况,这时我们用以下函数直接获取Unicode码:CLng("&h"+Hex$(AscW((Mid([Str],1,1)))))
这样就取得了字符的Unicode码,然后你就可以将其转成utf-8格式,再转成二进制字节流使用md5或者自定义函数进行加密解密了。
自定义函数如:
字符二进制字节为:01010001    01010011
你可以进行反转   :11001010    10001010
替换                 :00110101    01110101
穿插                 :01001101    11010101
还可以有更多加密操作,比如<<>> mod等等,最后转成字符存储
就完成了加密,解密过程相反,这里不再赘述。
大家可以自己动手试试,有好的发现和方法可以和大家交流一下。

作者: t小宝    时间: 2011-1-8 17:24
很好,学习了
作者: 张杨    时间: 2011-6-5 18:36
看看
作者: 张杨    时间: 2011-6-5 18:37
看看,学习一下




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3