【发布时间】:2014-01-23 18:02:22
【问题描述】:
我有 utf8 数据,我通过以下方式传递给 DIGEST::SHA:
my $sha1=Digest::SHA->new;
foreach (@fields ) { $sha->add($record) }
print $sha1->hexdigest;
但我得到了意想不到的行为,每次我在 http://metacpan.org/pod/Digest::SHA 上阅读的同一条记录得到不同的摘要时,使用带有 UTF8 的摘要 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;
任何帮助将不胜感激。
【问题讨论】:
-
您没有向我们提供有关
$record中的内容及其来源的足够信息,无法回答您的问题。 -
记录来自db,它的json用json encode subrotine编码
-
永远不要使用
use bytes;。查看它的文档。 /// 不清楚是哪两个东西产生了不同的哈希值,所以真的没什么可做的。 -
上面的代码没有意义。您为每个字段一次将相同的内容 (
$record) 添加到哈希函数中。应该是$record{$_}? -
另外,当你说你的字符串中有 UTF-8 数据时,这个 UTF-8 数据是否可以编码成 Latin-1?既然你没有死,我假设它可以用 Latin-1 编码。如果是这样,那么您是否有理由认为 UTF-8 实际上是问题所在?此代码是否适用于 Latin-1 字符串?