来自MongoDB手册:
默认情况下,所有数据库字符串均为UTF8。要保存图像、二进制数据和其他非UTF8数据,您可以将字符串作为对数据库的引用传递。
我正在获取页面并希望将内容存储以供以后处理。
- 我不能依赖meta-charset,因为许多页面具有utf8内容,但错误地声明为iso-8859-1或类似的格式
- 因此,我不能使用
Encode
(不知道原始字符集) - 因此,我想将内容简单地
存储为字节流
(二进制数据),以备以后处理
我的代码片段:
sub save {
my ($self, $ok, $url, $fetchtime, $request ) = @_;
my $rawhead = $request->headers_as_string;
my $rawbody = $request->content;
$self->db->content->insert(
{ "url" => $url, "rhead" => \$rawhead, "rbody" => \$rawbody } ) #using references here
if $ok;
$self->db->links->update(
{ "url" => $url },
{
'$set' => {
'status' => $request->code,
'valid' => $ok,
'last_checked' => time(),
'fetchtime' => $fetchtime,
}
}
);
}
但是出现了错误:
在/opt/local/lib/perl5/site_perl/5.14.2/darwin-multi-2level/MongoDB/Collection.pm的第296行,子例程中的宽字符。
这是我存储数据的唯一地方。
问题是:在MondoDB中存储二进制数据的唯一方法是将其编码,例如使用base64吗?
$rawhead
和$rawbody
设置为手册中给出的示例(即"\xFF\xFE\xFF"
),它是否会发出相同的警告? - raina77ow