2014-01-23 91 views
2

我有我通過消化:: SHA以下方式UTF8數據:摘要:: SHA和UTF8

my $sha1=Digest::SHA->new; 

foreach (@fields) { $sha->add($record)  } 
     print $sha1->hexdigest; 

,但我得到意想不到的行爲,每一次我得到不同的時間消化了相同的記錄我在http://metacpan.org/pod/Digest::SHA看是否有使用精華SHA與UTF8 我嘗試以下metigation的副作用,但都沒有工作:

{use bytes; 

foreach (@fields) { $sha->add($record)  } 
     print $sha1->hexdigest; 
} 

use Encode qw(encode_utf8); 
    foreach (@fields) { $sha->add((encode_utf8($record))  } 
     print $sha1->hexdigest; 

任何幫助將不勝感激謝謝。

+0

你的天堂」給我們提供了足夠的關於'$ record'中的內容的信息,以及它來自哪裏來回答你的問題。 – cjm

+0

記錄來自數據庫和它的JSON編碼subrotine – smith

+0

永遠不要使用'使用字節;'。查看其文檔。 ///目前還不清楚兩件事情會產生不同的哈希值,所以它沒有什麼可繼續。 – ikegami

回答

1

沒有看到您的實際數據(例如use Data::Dumper; $Data::Dumper::Useqq=1; print Dumper $record;)以及您期望的SHA,很難提供幫助。

這就是說,你可能會發現得到一致SHA最簡單的方法是迫使JSON編碼只輸出ASCII,並確保它始終把散元素以一致的順序:

use JSON; 
$serialized = JSON::to_json($data_structure, { 'ascii' => 1, 'canonical' => 1 });