У меня есть следующая база данных , написанная в каком-то варианте 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, предполагая, что это относительно современная версия доступа ...