То, что я пытаюсь достичь, является следующим: Существует сценарий perl, который записывает в Redis DB файл msgpack, но без кодировки utf8. Затем мне нужно получить значение с помощью node.js и распаковать его. Также мне нужно для сценария на языке Perl, чтобы иметь возможность получить значение из БД и распаковать его
Если я использую в Perl
use strict;
use warnings;
use Data::MessagePack;
use Encode;
my $mp = Data::MessagePack->new();
my $packed = $mp->pack([qw(a b c d f)]);
print "packed:".$packed."\n";
my $encoded = Encode::encode_utf8($packed);
print "packed encoded using encode_utf8 :".$encoded."\n";
my $decoded = Encode::decode_utf8($encoded);
print "packed decoded using decode_utf8:".$decoded."\n";
my $unpacked = $mp->unpack($decoded);
print $unpacked."\n";
Выход: упаковано: абв DF
упакованное кодируются с использованием encode_utf8: ¡a¡b¡c¡d¡f
упакованы декодируется с использованием decode_utf8: ABCDF
Data :: Mess agePack-> распаковка: дополнительные байты в /home/myname/workspace/test/test_msgpack.pl линии 29.
Таким образом, я либо ничего не конвертировать в Perl в utf8 до и просто отправить его в БД, так что node.js делает все остальное, но ему также необходимо преобразовать данные в формат, который Perl понимает для распаковки.
или
Я ничего node.js не делать, но только с помощью любого модуля msgpack, которые существуют, я распаковывать сообщение для процесса, а также упаковать и сохранить его в базу данных для Perl для извлечения и распаковки ,
Во втором варианте я проблема указанным выше
Data::MessagePack->unpack: extra bytes at /home/myname/workspace/test/test_msgpack.pl line 29.
и в первом node.js решения не понимает формата msgpack, что PERL сохраненного в БД
Что делает ваш взгляд Perl скрипта как? Вы использовали utf8? Также ваш массив из Perl явно отличается, так как он имеет «e». –