【发布时间】:2012-06-22 08:50:59
【问题描述】:
来自MongoDB 手册:
默认情况下,所有数据库字符串都是 UTF8。要保存图像、二进制文件、 和其他非 UTF8 数据,您可以将字符串作为对 数据库。
我正在获取页面并希望存储内容以供以后处理。
- 我不能依赖元字符集,因为很多页面都有 utf8 内容但错误地声明了 iso-8859-1 或类似内容
- 所以不能使用
Encode(不知道原始字符集) - 因此,我想简单地存储内容
as flow of bytes(二进制数据)以供以后处理
我的代码片段:
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"),它会给出相同的警告吗?