Двоичные данные Perl и MongoDB

Из руководства MongoDB:

По умолчанию все строки базы данных имеют кодировку UTF8. Для сохранения изображений, двоичных файлов, и другие данные, отличные от UTF8, вы можете передать строку как ссылку на база данных.

Я извлекаю страницы и хочу сохранить содержимое для последующей обработки.

  • Я не могу полагаться на мета-кодировку, потому что многие страницы имеют содержимое utf8, но ошибочно объявляют iso-8859-1 или аналогичный
  • , поэтому не могу использовать Encode(не знаю исходный charset)
  • , поэтому я хочу сохранить содержимое просто как поток байтов (двоичные данные) для последующей обработки

Фрагмент моего кода:

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?

8
задан jm666 20 June 2012 в 08:41
поделиться