做了下面的测试:
1. xshell的编码格式是utf-8,执行python脚本得到字符串的utf-8编码下的md5值
>> import hashlib
>>> i = u'hs2d!ds-df;dfU8fdsER&S6dwd1e/wkxd/测试/test.mp41'
... u = i.encode('utf-8')
... mu = hashlib.md5()
>>> mu.update(u)
>>> mu.hexdigest()
'c772517ade7b4365f95d93f4b074ce41'
>>>
2. xshell的编码格式是GBK,执行python脚本得到错误的utf-8下的md5值 ,得到的是gbk下的md5值
>>> import hashlib
>>> i = u'hs2d!ds-df;dfU8fdsER&S6dwd1e/wkxd/测试/test.mp41'
... u = i.encode('utf-8')
... mu = hashlib.md5()
>>> mu.update(u)
>>> mu.hexdigest()
'd4b676a75465bdc3807dbd2855349b71'
3. xshell的编码格式是gbk,执行python脚本得到正确的gbk下的md5值,但是报错了
>>> import hashlib
>>> i = u'hs2d!ds-df;dfU8fdsER&S6dwd1e/wkxd/测试/test.mp41'
>>>
>>> g = i.encode('gbk')
Traceback (most recent call last):
File "", line 1, in
UnicodeEncodeError: 'gbk' codec can't encode character u'\xb2' in position 34: illegal multibyte sequence
>>>
>>> mg = hashlib.md5()
>>> mg.update(g)
>>> mg.hexdigest()
'd4b676a75465bdc3807dbd2855349b71'
4. 下面这样写就不报错了
#!/usr/bin/env python
# -*- coding: gbk -*-
import hashlib
i = u'hs2d!ds-df;dfU8fdsER&S6dwd1e/wkxd/测试/test.mp41'
g = i.encode('gbk')
mg = hashlib.md5()
mg.update(g)
mg.hexdigest()
print mg.hexdigest()
5. 或者把xshell的编码格式改为utf-8,输出的结果是gbk编码后的md5值
总结:
1. 如上测试,xshell中的编码格式可以设置为utf-8不变,执行对应的python脚本,就可以得到正确编码格式下的md5值
2. 测试中文求md5值的时候,编码主要分为utf-8和gbk,这个主要决定于发送url请求的客户端的编码格式,如xshell客户端设置编码格式gbk后发送请求,程序会根据xshell客户端的gbk编码格式进行求md5值,求出的就是gbk编码下的md5值
3. 在xshell客户端的utf-8编码格式下执行下面命令算出来的是utf-8编码下的md5值,在xshell的gbk编码格式下执行下面命令算出来的是gbk编码下的md5值
命令:
求字符串string的md5值:echo -n "string" |md5sum|cut -d ' ' -f1 (-n必须带着)
求文件jilu.txt的md5值:md5sum jilu.txt |cut -d " " -f1
求字符串string的base64编码:echo -n "string" |base64
阅读(4412) | 评论(0) | 转发(0) |