1
mengzhuo 2015-05-26 23:17:11 +08:00 1
看encoding都是utf8 么
不是的话,全部转成utf8 |
2
Ncer OP |
3
Sylv 2015-05-27 18:59:06 +08:00 1
话说我怎么都没法从你发的 "gn· ¿EA{3©äIÇ " 得到你说的两个 md5 结果,我得到的是 7f5b83f8d5a7a809928bffa0197381f8。
我猜可能是 Unicode 的等价性问题导致的。 例如下面虽然字符 ä 的样子都一样,但 Unicode 码点是不同的,所以编码成 utf-8 的 bytes 序列也会是不同的: >>> u"ä" u'\xe4' >>> u"ä".encode('utf-8') '\xc3\xa4' >>> u"ä" u'a\u0308' >>> u"ä".encode('utf-8') 'a\xcc\x88' 而 u'a\u0308' 可以被 normalize 为 u'\xe4': >>> import unicodedata >>> unicodedata.normalize('NFC', u'a\u0308') u'\xe4' 所以可能是在输入到 Python 或 JavaScript 过程中字符串中的 Unicode 字符被 normalize 过了,导致字符串不等价了,以致于 md5 不等。 |
4
Ncer OP @Sylv 可能复制过来其中的编码又有问题了,我md5 这个页面上的那个字符串也是你的结果。
问题解决了。 将该字符串用ISO-8859-1 编码为字节流 参考了这里: http://www.regexlab.com/zh/encoding.htm 原理还不是很懂,编码问题真是蛋疼 |