我有以下Python代码段:
import zlib
def object_read(repo, sha):
path = repo + "/objects/" + sha[0:2] + "/" + sha[2:]
with open (path, "rb") as f:
raw = zlib.decompress(f.read())
return len(raw)
print(object-read(".git", "1372c654fd9bd85617f0f8b949f1405b0bd71ee9"))
Run Code Online (Sandbox Code Playgroud)
和它的P6同行之一:
#!/usr/bin/env perl6
use Compress::Zlib;
sub object-read( $repo, $sha ) {
my $path = $repo ~ "/objects/" ~ $sha.substr(0, 2) ~ "/" ~
$sha.substr(2, *);
given slurp($path, :bin) -> $f {
my $raw = uncompress($f).decode('utf8-c8'); # Probable error here?!
return $raw.chars;
}
}
put object-read(".git", "1372c654fd9bd85617f0f8b949f1405b0bd71ee9")
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它们时,它们使我得到的结果不一:
$ python bin.py
75
$ perl6 bin.p6
74
Run Code Online (Sandbox Code Playgroud)
@melpomene已经到达现场。您不是使用Python解码,原始文件中的字节数可能会更多。插入
say uncompress($f).elems;
Run Code Online (Sandbox Code Playgroud)
解码之前$raw,您会发现它(在文件和我的系统中)还包含2个字节。通过utf8-c8渲染可能会将几个字节合并到单个代码点(或更多代码点)中。通常,代码点的数量将小于IO流中的字节数。