lichd 写道
刚刚看到你对淘宝编码的研究,我个人认为淘宝那个编码可能是Base32规范的演化版,只不过淘宝使用0来代替=做末位填充,RFC 3548 (The Base16, Base32, and Base64 Data Encodings)
对这些都有规范
经过证实,lichd
的观点正确,由于我在本文发表之前,除Base64
之外,其他的BaseXX
都没接触过,所以不知道这个正是Base32
的效果。
不过看官们请放心,本文的思路也和Base32
符合。当时的乱打乱撞,结果造了一个古人已经造好的轮子,实在惭愧。
因此,感谢lichd
的观点,从而稀释了我体内SB细胞的浓度。
回头看了一下本文的一个旧实现(codec.zip
),一年前写得代码太糟糕了,不推荐。
现在提供一个相对不错的实现,>>猛击获取<<
。
--------------------------
--------------------------
--------------------
---------------------
------------------------------------------分割线
--------------------------------------------
--------------------------
--------------------------
--------------------
---------------------
很久之前发现淘宝网的搜索关键字在编码后有点可爱,小写英文字母+数字的组合。
想去研究一下,但是后面好像没了回事似的。。记性不好
然后这两天不知道为什么,突然间抽起条脑筋,跑去研究。。。。
--------------------------开始分割线--------------------------
在淘宝网上用关键字“gembler”搜索一下商品,得出以下URL:
http://search1.taobao.com/browse/0/n-0-----------------g,m5sw2ytmmvza----------------40--commend-0-all-0.htm?at_topsearch=1
(留意上面这里:“m5sw2ytmmvza”
)
经过一轮 天昏地暗、沙尘滚滚
的分析、研究之后,得出以下结论:
在Base64中,码表是由 [A-Z,a-z,0-9,+,/,=(pad)] 组成的。
然后自己也弄个码表,由 [a-z,2-7(这个2-7是在
淘宝网上搜索了n次而得出的结论)
] 组成的:
a
|
b
|
c
|
d
|
e
|
f
|
g
|
h
|
i
|
j
|
k
|
l
|
m
|
n
|
o
|
p
|
q
|
r
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
-------------------------------愚蠢分割线---------------------------------
s
|
t
|
u
|
v
|
w
|
x
|
y
|
z
|
2
|
3
|
4
|
5
|
6
|
7
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
29
|
30
|
31
|
在Base64中,是将二进制连成一串,然后再按6位来分割,分割完后在前面补0,这个地球人都知道,不多说了。
而我呢,哈哈,捣蛋一下,按5位来分割,如果刚好够分,那就爽了,
但是,世事往往不如人意,位数不够,那咋办呢?看下面 :)
在Base64中,是用"="来解决的吧。
现在呢,就是在前面补0,然后在后面再补0,其实就是前后补0,
但是,
按5位来分
割
,前面3个0是补定的了,后面的0就看上帝怎么安排了。
举个小例子:字符串 "aaa",(编码/加密)后是 "mfqwc"
二进制:
|
01100001
|
01100001
|
01100001
|
|
|
转换后:
|
(000
)01100
|
(000
)00101
|
(000
)10000
|
(000
)10110
|
(000
)0001(0
)
|
十进制:
|
12 |
5 |
16 |
22 |
2 |
码表对应:
|
m |
f |
q |
w |
c |
反过来,(解码/解密):
码表对应:
|
m |
f |
q |
w |
c |
十进制:
|
12 |
5 |
16 |
22 |
2 |
二进制:
|
00001100
|
00000101
|
00010000
|
00010110
|
00000010
|
去掉前3个0后:
|
01100
|
00101
|
10000
|
10110
|
00010
|
合并后:
|
0110000101100001011000010
|
然后把合并后的串的长度除一下8,发现多了个0:
合并后的
二进制码:
|
01100001
|
01100001
|
01100001
|
0
|
多了就算了,不要了(其实是在{编码/加密}的分割时候,在分剩的余数的后面补的0)。
然后再将 byte[] 转回字符串
OK!又见回"aaa"了。 :)
*有一点值得注意的是:UTF-8、GBK、GB18030 一般都没什么问题,但是 GB2312 可能字符集不够丰富,繁体字在decode的时候成问号了。
搞了半天,“可视化编辑器”的 Java Code不好使,骨干代码在回帖里贴出................(完整的代码,有兴趣的同志们请见附件!
)
--------------------------结束分割线--------------------------
。。。整理好了,整个人都铺满了灰尘.......
PS:不知道淘宝网的思路是不是这样
(补:另外一篇讨论 - “
拍拍网的搜索关键字的编码与解码
”)
分享到:
相关推荐
航信汉字的编码与解码,编码便于使自己的pid进行汉字传输, 航信汉字编码与解码,eterm汉字编码与解码,汉字编码问题
霍夫曼编码 与解码本软件是原创作品,包含霍夫曼编码 与解码的全部代码,可直接用于文件的压缩和解压
《卷积编码与解码的MATLAB实现及性能分析》.docx《卷积编码与解码的MATLAB实现及性能分析》.docx《卷积编码与解码的MATLAB实现及性能分析》.docx《卷积编码与解码的MATLAB实现及性能分析》.docx《卷积编码与解码的...
淘宝 url 解码和编码方法(转的),本人转载,版权属于作者
PCM编码与解码仿真实验报告
json编码与解码json编码与解码json编码与解码json编码与解码json编码与解码json编码与解码json编码与解码
哈夫曼编码(Huffman Coding),是一种熵编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般...
完美支持中文 base64 编码与解码 目前速度最快 效率最高的编码与解码
huffman编码与解码附带数据结构答案
数据结构用c语言实现 哈弗曼编码与解码注意里面的输入形式否则会出错
C++ jpeg图像编码与解码,C + + JPEG image coding and decoding
本文对于如何实现这一编码和解码进行了描述,并给出了它们的C语言实现过程。
1,消息编码与解码 1),用C实现7-bit编码和解码的算法 2),用C实现UCS2编码和解码的算法 2,消息的发送(PDU编解码) 1),发送短消息 2),读取短消息 3),删除短消息 3,串口读写短信
C# Encoder 与 Decoder的例子,详细注释。 Encoder Decoder 编码 解码 C# Encoder Decoder 编码 解码 C# Encoder Decoder 编码 解码 C# Encoder Decoder 编码 解码 C#
matlab开发-算术编码和解码。使用算术编码对消息进行编码和解码
这是一个简单的用c实现的算术编码的编码与解码的程序
用于对字符串进行编码和解码,只需要输出字符串或者编码后的文件便可以实现操作。
对9位编码的卷积编码进行卷积编码和解卷积,并设置了3位误码
c语言编写的哈夫曼编码与解码小程序,学生作业
C++URL编码和解码