Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结
Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结
1. Base64编码, 1
2. Base64实现转换原理 1
3. Base16 md5编码 2
4. Quoted-printable 编码 QP编码 2
5. Base64的俩个子模式 urlsafe Or url unsafe 3
6. UUencode编码 3
7. private static char toChar(int index, boolean isURLSafe) { 4
8. 参考 5
1. Base64编码,
是我们程序开发中经常使用到的编码方法。它是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用作电子邮件标准)中一种可打印字符表示二进制数据的常见编码方法!它其实只是定义用可打印字符传输内容一种方法,并不会产生新的字符集!有时候,我们学习转换的思路后,我们其实也可以结合自己的实际需要,构造一些自己接口定义编码方式。好了,我们一起看看,它的转换思路吧!
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. Base64实现转换原理
它是用64个可打印字符表示二进制所有数据方法。由于2的6次方等于64,所以可以用每6个位元为一个单元,对应某个可打印字符。我们知道三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要用4个Base64的可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中一般有所不同。但是,我们经常所说的Base64另外2个字符是:“+/”。这64个字符,所对应表如下。
3. Base16 md5编码
4. Quoted-printable 编码 QP编码
Quoted-printable 可译为“可打印字符引用编码”、“使用可打印字符的编码”,我们收邮件,查看信件原始信息,经常会看到这种类型的编码!
最多时候,我们在邮件头里面能够看到这样的编码!Content-Transfer-Encoding:quoted-printable
5. Base64的俩个子模式 urlsafe Or url unsafe
case 62: c = isURLSafe? '-': '+'; break;
case 63: c = isURLSafe? '_': '/'; break;
default: throw new RuntimeException("Cannot happen.");
6. UUencode编码
起先用在unix网络中,先是Unix系统下将二进制的资料借由uucp邮件系统传输的一个编码程式,也是一种二进制到文字的编码。不属于MIME编码中一员。它也是定义了用可打印字符表示二进制文字一种方法,并不是一种新的编码集合。主要解决,二进制字符在传输、存储中问题。它早期在电子邮件中使用较多,最近这些年来基本上被MIME 中Base64所取代了。E-mail中一般采用UU、MIME、BINHEX三种编码标准! 我想,了解下这种编码将二进制字符转换为可打印字符实现思路!对我们以后做类似处理工作,应该会有很多的启示。
思考问题:它的字符范围都是可打印字符,我们会发现64字符集合中,有很多是特殊字符:”!”#¥%&‘()*+=’” 等等。这些字符在不同应用中,可能都有些特殊用途。因此,在使用该编码时候,或许会出现一些问题。我想这也许是UUencode编码方法,逐渐被Base64所取代的原因吧。
7. private static char toChar(int index, boolean isURLSafe) {
char c;
switch(index) {
case 0: c = 'A'; break;
case 1: c = 'B'; break;
case 2: c = 'C'; break;
case 3: c = 'D'; break;
case 4: c = 'E'; break;
case 5: c = 'F'; break;
case 6: c = 'G'; break;
case 7: c = 'H'; break;
case 8: c = 'I'; break;
case 9: c = 'J'; break;
case 10: c = 'K'; break;
case 11: c = 'L'; break;
case 12: c = 'M'; break;
case 13: c = 'N'; break;
case 14: c = 'O'; break;
case 15: c = 'P'; break;
case 16: c = 'Q'; break;
case 17: c = 'R'; break;
case 18: c = 'S'; break;
case 19: c = 'T'; break;
case 20: c = 'U'; break;
case 21: c = 'V'; break;
case 22: c = 'W'; break;
case 23: c = 'X'; break;
case 24: c = 'Y'; break;
case 25: c = 'Z'; break;
case 26: c = 'a'; break;
case 27: c = 'b'; break;
case 28: c = 'c'; break;
case 29: c = 'd'; break;
case 30: c = 'e'; break;
case 31: c = 'f'; break;
case 32: c = 'g'; break;
case 33: c = 'h'; break;
case 34: c = 'i'; break;
case 35: c = 'j'; break;
case 36: c = 'k'; break;
case 37: c = 'l'; break;
case 38: c = 'm'; break;
case 39: c = 'n'; break;
case 40: c = 'o'; break;
case 41: c = 'p'; break;
case 42: c = 'q'; break;
case 43: c = 'r'; break;
case 44: c = 's'; break;
case 45: c = 't'; break;
case 46: c = 'u'; break;
case 47: c = 'v'; break;
case 48: c = 'w'; break;
case 49: c = 'x'; break;
case 50: c = 'y'; break;
case 51: c = 'z'; break;
case 52: c = '0'; break;
case 53: c = '1'; break;
case 54: c = '2'; break;
case 55: c = '3'; break;
case 56: c = '4'; break;
case 57: c = '5'; break;
case 58: c = '6'; break;
case 59: c = '7'; break;
case 60: c = '8'; break;
case 61: c = '9'; break;
case 62: c = isURLSafe? '-': '+'; break;
case 63: c = isURLSafe? '_': '/'; break;
default: throw new RuntimeException("Cannot happen.");
}
return c;
}
8. 参考
Base64 编码介绍、Base64编码转换原理、算法-程默的博客.html
Quoted-printable 编码介绍、编码解码转换-程默的博客.html
UUencode 编码,UU编码介绍、UUencode编码转换原理、算法-程默的博客.html
Atitit.字节数组转字符串 base64 base16 Quoted-printable 编码原理设计 attilax 总结相关推荐
- java字符串的字节数组_Java字节数组到字符串到字节数组
我正在尝试将byte []转换为字符串,将byte []的字符串表示形式转换为byte []的转换...我将byte []转换为要发送的字符串,然后我期望我的Web服务(用python编写)将数据直接 ...
- C#中字节数组与字符串的来回转换
C#中字节数组与字符串的来回转换会遇到一个奇怪的问题.这个问题是在做网络传送文件时遇到的. 问题如下: 就是把件流形成的字节数组转成字符串发送,对端接收到过后把字符串还原成字节数组然后形成文件流. 这 ...
- 如何将零终止的字节数组转换为字符串?
本文翻译自:How to convert a zero-terminated byte array to string? I need to read [100]byte to transfer a ...
- VB 字节数组和字符串的转换问题 (StringByte)
VB 字节数组和字符串的转换问题 (String<>Byte) Posted by JiaJia 16 March,2009 (2)Comment 一. 前言 数据类型转换在编程中经常用到 ...
- c# 流,字节数组及字符串之间的转换
//1.流转换为字节数组,fileUpload为.net上传控件 Stream stream = fileUpload.FileContent; byte[] fileBuffer = new byt ...
- scala 字符串转换数组_如何在Scala中将字节数组转换为字符串?
scala 字符串转换数组 Byte Array in Scala is an array of elements of a byte type. String in Scala is a colle ...
- java 字符字节数组_Java字符串与字符、字节数组知识点总结
(1)用字符数组创建字符串对象,String类中有两个有字符数组创建字符串对象的构造的方法: String(char [ ])该构造方法用指定的字符数组创建构造一个字符串对象: String (cha ...
- java 字符串 字节数组_字符串到字节数组,字节数组到Java中的字符串
java 字符串 字节数组 Today we will learn how to convert String to byte array in java. We will also learn ho ...
- C#字节数组与字符串相互转换代码案例
转载连接:http://blog.csdn.net/c_s_d_n_2009/article/details/52583274?locationNum=9&fps=1 一.字节数组转换为字符串 ...
- java中字节数组转换为字符串
1.字节数组转换为字符串 byte[] byBuffer = new byte[20]; ... ... String strRead = new String(byBuffer); strRead= ...
最新文章
- WIN7源码安装Apache和PHP注意事项
- 我什么时候应该使用结构而不是类?
- 让Windows命令行显示UTF-8字符
- Arcgis Server发布服务
- How is new Appoinment id generated in my task followup scenario
- LSTM+MDN【混合密度网络】---sketch rnn
- magento 基本配置
- Git前世今生-版本控制软件的发展
- 极客大学架构师训练营 框架开发 模式与重构 JUnit、Spring、Hive核心源码解析 第6课 听课总结
- Oracle安装步骤(自用)
- Unity URP/SRP可编程渲染管线
- 向量场的散度和旋度_矢量场散度和旋度的物理意义
- 猴子摘香蕉-人工智能实验的思考
- 设想无人值守的自动化测试方案
- 深夜谈【辱母杀人案】
- 2023华为OD面试手撕代码经验分享
- intel realsense 深度相机深度图像处理API总结
- 拔萝卜MySQL_mysql考题
- Axure RP9中继器的可做用途之一,类似于购物界面的展示
- 【转】如何挽救一个想自杀的人