Base64是什么? Base64编码的用途是为了传输和传输安全(其实并不太安全)。 它的算法是:每3个字节(每字节8bit),转换为4个6bit的字节(一个字节应该是8bit,所以前2位补0),然后每个6位前2位(高位)被2个零。例如: xxxxxxxx yyyyyyyy xxxxyyyy这里转换前的3个字节,然后,每6位分到一个字节中: xxxxxx xxyyyy yyyyxx xxyyyy 然后高位补0 00xxxxxx?00xxyyyy?00yyyyxx?00xxyyyy 其中xy是二进制的0和1,然后再按base64码表进行替换(base64,基本的64个码,=号不在其内) ? 0 A 16 Q ?32 g ?48 w???????? 1 B ?17 R ?33 h ?49 x 2 C ?18 S ?34 i ?50 y 3 D ?19 T ?35 j ?51 z 4 E ?20 U ?36 k ?52 0 5 F ?21 V ?37 l ?53 1 6 G ?22 W ?38 m ?54 2 7 H ?23 X ?39 n ?55 3 8 I ?24 Y ?40 o ?56 4 9 J ?25 Z ?41 p ?57 5 10 K ?26 a ?42 q ?58 6 11 L ?27 b ?43 r ?59 7 12 M ?28 c ?44 s ?60 8 13 N ?29 d ?45 t ?61 9 14 O ?30 e ?46 u ?62 + 15 P ?31 f ?47 v ?63 / ? 从码表中可以得知,base64编码后的字串只包含在小写字母,数字,还有+/这2个特殊字符。 还有一些扩展的base64用法。例如用于url传递的其中把+号和左斜线换成了*和- 现在以Hello这个单词来测试一下,之前,先通过.net提供的base64转换方法得到它的base64编码。 ? ? 在Ascii编码环境下 Hello这个单词有5个字母,就是5个字节,那么可以把它分为Hel lo两部分。第一部分的Hel是3个字节,它的二进制格式为(可以查ascii表,也可以由上一篇中给出的方法求):010010000110010101101100 然后分为4个6位:010010 000110 010101 101100 然后高位补0:00010010?00000110?00010101?00101100,然后换算为10进制为18 6 21 44 然后与码表对应替换:SGVs ? 下边对后2个字节进行编码。因为base64要求8*3――6*4,然后才进行下一步计算。这里只有2个字节,那应该对其补,补就是用=号来替换。 开始:lo的二进制为0110110001101111 因为不够24位,所以分为3个6位字节011011 000110 111100 011011 000110 111100,10进制数为:27 6 60,然后再补一个=号就是 bG8= 与上边的连起来就是SGVs bG8= ? 在程序中验证,这个是正确的。 ? 再做一个汉字语句的base64编码:赵。 在utf-8编码下,它的二进制是:111010001011010110110101 它有3个字节,分为4个字节:111010 001011 010110 110101,补0:00111010 00001011 00010110 00110101 10进制是:58 11 22 53 码表:6LW1。 ? 在GB2312环境下的64位编码是怎样的? “赵”字的gb2312编码环境下的字节有2个,它的二进制位是:1101010111010100,分为6位的: 110101 011101 010000 对应的10进制是:53 29 16,对应码表是1dQ,然后补=号就是 1dQ= ? 在Ascii环境下的64位编码是怎样的? “赵”字不在Ascii码内(ascii在127之内)。那么对于编码环境下不存在的字符怎么样处理呢? 在ascii环境下,任何大于127的,即U+007F(unicode编码127的),则由ascii的问号替换。 然后,问号在unicode值下是63(Ascii下也是,这是10进制数),63的二进制是:111111。这是一个字节(按Base64编码算法,要补齐3个字节,所以最后要加2个等号),它应该是:00111111,然后每6位分一字节:001111 110000 不足的在后边补0,这个补0与6位变8位补不是一样的概念。那么这两个8位的10进制数是: 15 48,对应码表就是Pw, 然后还要加上2个等号== 最后变成了Pw== ? ANSI American National Standards Institute(ANSI――美国国家标准局) 为使计算机支持更多语言,通常使用?0x80―0xFF?范围的?2?个字节来表示?1?个字符。比如:汉字?'中'?在中文操作系统中,使用?[0xD6,0xD0]?这两个字节存储。 不同的国家和地区制定了不同的标准,由此产生了?GB2312, BIG5, JIS?等各自的编码标准。这些使用?2?个字节来代表一个字符的各种汉字延伸编码方式,称为?ANSI?编码。在简体中文系统下,ANSI?编码代表?GB2312?编码,在日文操作系统下,ANSI?编码代表?JIS?编码。 不同?ANSI?编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段?ANSI?编码的文本中。
{?
????byte[]?bb?=?selfencoding.GetBytes(selfChar);
????return?Convert.ToBase64String(bb);
}
详细解决方案
字符编码(二)――Base64,ANSI
热度:809 发布时间:2012-09-20 09:36:50.0
public?static?string?Base64Encoding(this?string?selfChar,Encoding?encoding)
相关解决方案
- 怎么设置TextBox编码为“ANSI”
- base64 图片流转为图片的有关问题
- silverlight socket 怎么支持 ansi 和 gb2312编码
- Invalid Key or input string is not a valid base64 string解决方案
- base64 解码有关问题
- “ANSI trigraph 特性”这是什么特性?
- 求c# md5(Base64)加密方法。如123456加密码后的是LghTkEmsD2tbQ3fsIBRcBg==,该如何解决
- html img Src base64 图片展示(减少静态请求连接)
- 兼容ie6跟ie7 的16进制码流在html中显示为图片代码(base64)
- 这到底是哪里的图片?data:image/png:base64,该怎么处理
- 图片 Base64 格式 字符串变换
- base64 图片展示
- 【转】Java 高性能Web 开发(四)-图像的 BASE64 编码
- 关于前台压缩图片 base64 大小的有关问题,
- js Base64 汉语言解码
- 一个相仿 Base64 但真正实现了加密的 JS 文字加密算法
- 字符编码(二)――Base64,ANSI
- 正则表达式(base64)懂的回
- Base64+3DES解密结果部分乱码,
- base64.
- 警告:com.sun.org.apache.xerces.internal.impl.dv.util.Base64 是 Sun 的专用 API,可能会在将来版本
- 一个加密程序。没法解析 Base64
- H5挪动端图片裁剪(base64)
- 请教:BASE64.怎么读取文件为byte[]
- java中有没有Unicode 与 Ansi 码互转的方法?解决办法
- 读取数据库乱码,编码是“Default ANSI code page”无法解决
- Base64 编码原理以及编码解决思路
- 利用 XML 实现 BASE64 编码和解码解决方法
- Android Base64+Soap+WebService 图片上传内存溢出有关问题
- require ANSI-style prototype解决办法