2

ここに私のPHPコードがあります:

$str = '你好';
$input_encoding = mb_detect_encoding($str, array('ASCII','GB2312','GBK','UTF-8'), true);
echo sprintf('input encoding:%s', $input_encoding);

$str_gb = iconv($input_encoding, 'GBK', true);
echo sprintf("utf8 encoding:%s\n", $str);
echo sprintf("gb encoding md5:%s\n", md5($str_gb));
echo sprintf("utf8 encoding md5:%s\n", md5($str));

これが私のpythonコードです:</p>

#!/usr/bin/env python
#coding:utf-8


import urllib
import hashlib

str_u = u'你好'
str_gb = str_u.encode('gbk')
str_u8 = str_u.encode('utf-8')

m = hashlib.md5()
m.update(str_gb)
str_gb_md5 = m.hexdigest()
m.update(str_u8)
str_u8_md5 = m.hexdigest()

print 'gb md5:%s' % str_gb_md5
print 'utf-8 md5:%s' % str_u8_md5

PHP コードの結果は次のとおりです。

input encoding:CP936
utf8 encoding:你好
gb encoding md5:c4ca4238a0b923820dcc509a6f75849b
utf8 encoding md5:7eca689f0d3389d9dea66ae112e5cfd7

Pythonコードの結果は次のとおりです。

gb md5:b94ae3c6d892b29cf48d9bea819b27b9
utf-8 md5:a8a343223373c7d78c3fb8bad2d786c3

そして、ここに私のプログラミング環境があります: PHP 5.5.4 (cli)&Python 2.6.8

THX!

4

1 に答える 1

1

PHP コードと Python コードの両方に誤りがあります。PHP コードの gbk md5 と Python コードの utf8 md5 が間違っています。

パイソン部分:

Python hashlib のhash.update関数の使い方を誤解しています。

hash.update(引数)

文字列 arg でハッシュ オブジェクトを更新します。繰り返しの呼び出しは、すべての引数を連結した 1 回の呼び出しと同じです: m.update(a); m.update(b) は m.update(a+b) と同等です。

修理:

print  hashlib.md5(str_u8).hexdigest()

7eca689f0d3389d9dea66ae112e5cfd7

PHP 部分:

$str を iconv 関数に渡すのを忘れ、代わりに真の値 (1 に変換) を渡しました。

修理:

$str = '你好';
$str_gb = iconv('UTF-8', 'GBK', $str);
echo sprintf("gb encoding md5:%s\n", md5($str_gb));

出力:

gb エンコーディング md5:b94ae3c6d892b29cf48d9bea819b27b9

iconv 定義:

string iconv ( string $in_charset , string $out_charset , string $str )
于 2013-11-05T05:41:56.247 に答える