Как я могу получить _raw поток_ байтов, хранящихся в базе данных? - PullRequest
7 голосов
/ 24 мая 2019

У меня есть следующая база данных , написанная в каком-то варианте MS Access (это файл MDB - UNIX file подтверждает это)

Я пытаюсь прочитать содержимоеиз Javascript в Windows.Хотя, действительно, любые инструменты будут в порядке.Например, с Python тоже все будет в порядке ... но я пытаюсь избегать VB6 .Конечно, я могу вырезать часть кода там и запустить его в IDE, и я могу извлечь значения.Но я хочу понять основные механизмы

Я использую запрос из node-adobd, чтобы выбрать все карты "Данные" столбца.Это строка, которая была сжата с помощью zlib (уровень сжатия неизвестен), а затем помещена в таблицу.

В Node, используя следующую функцию Я смог сделать запрос и получить базовый поток строк ...

75 0a 00 00 **78 01** 53 d5 20 ...

Это магическое число ZLIB, котороепредупредил меняЯ пытался использовать zlib из Node, чтобы распаковать его, но это не помогло с различными ошибками.Эти первые 4 байта являются заголовком, который, похоже, добавляет игровой движок;но это не имеет ничего общего с полезной нагрузкой из того, что я могу сказать (вы можете прочитать подпрограмму сжатия здесь .

, так как кажется, что читать ее на земле VB6 без проблем, без каких-либо другихпостобработка из того, что я могу сказать (вы можете найти это modDatabase, если вы хотите прочитать это), все, о чем я могу думать, это: что-то происходит в коннекторе базы данных или когда я получаю данные. Что-то кодируется без моего согласия, возможно.

Я запрашиваю примерно так:

  connection.query('Select Number, Data from [Maps]')
   .then((results) => {
     const result = results[0]; // first one to experiment with
     // use the above code to construct a byte array from 
     // result.Data, but I have also tried things like 
     // Buffer.from ... but it asks about encodings
     // which I am unsure of!
   }); 

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

Насколько я понимаю, строки хранятся просто как последовательности байтов в памяти в концедня - могу ли я получить доступ к этому с низкого уровня? Если нет, как вы справляетесь с преобразованием кодировки?

Согласно этой странице , Memo - это Unicode (но он на самом деле не говорит, что), но он упоминает два байта, поэтому, вероятно, UTF-16, предполагая, что это относительно современная версия доступа ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...