我有utf8数据,我按以下方式传递给DIGEST :: SHA:
my $sha1=Digest::SHA->new;
foreach (@fields ) { $sha->add($record) }
print $sha1->hexdigest;
但是我得到了意想不到的行为,每次我在同一条记录上得到不同的摘要我在http://metacpan.org/pod/Digest::SHA上读到使用带有UTF8的Digest SHA会产生副作用 我尝试了以下的调查,但都不起作用:
{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 :(得分: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 } );