最近有个需求要在URL传一段二进制数据,首先想到的就是用Base64编码一下,但是注意到Base64里面有两个特殊符号“+”和“/”,在URL中需要编码一下不太方便。(补充:另一个方案是使用“-”和“_”替换,commons-codec里的Base64.encodeBase64URLSafeString())
干脆自己改一下了,反正算法也不复杂,先用GOP设计一下(Google Oriented Programming)!果然有现有的代码,改进后的算法叫Base62,使用还挺广泛,是我孤陋寡闻了!
Base62和Base64相比唯一的区别就是少了两个特殊符号。另外标准的Base64最后需要用=补位,但这是一个约定,自定义算法就可以去掉。总之Base62就是一个改掉了Base64所有缺点的算法,唯一的不足是因为码空间小了,会多占用1/32空间。
例子:
原文:但使龙城飞将在 不教胡马度阴山
Base64:5L2G5L2/6b6Z5Z+O6aOe5bCG5ZyoIOS4jeaVmeiDoemprOW6pumYtOWxsQ==
Base62:LpaUdHtXIzYCI3huilByODItxjcJPHjKgoDgrV7VtukwXT9kKbscJHWmFV
Base64和Base62算法都很简单,Base62在很多语言中缺少原生支持,我搜集了一下第三方类库:
在线测试:https://base62.io/
Java版本:http://iffiffj.iteye.com/blog/618713