Преобразуйте информацию массива байтов, поступающую из запросов db2, используя python

StackOverflow https://stackoverflow.com//questions/20009524

Вопрос

Я использую драйвер ODBC iSeries Access, чтобы попытаться выполнить запросы к DB2 для i.Я бы хотел сделать эту возвращаемую информацию более читаемой.Как я могу преобразовать информацию из массива байтов с помощью python?Пример вывода ниже:

>>> cursor.execute("SELECT * FROM QAAPFILE$") 
<pyodbc.Cursor object at 0x00C6D2C0>
>>> for row in cursor:
...     print row         


Example Output:
(1, bytearray(b'\xfd@@@@@@@@@'), 1, 1, 8, 9, bytearray(b'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'), bytearray(b'@@@@@@@@@@@@@@@@@@@@'), bytearray(b'\x00<\x02\x82B\x02\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'))
Many more rows
Это было полезно?

Решение

Я не уверен, почему вы смотрите на QAAPFILE $, и я не уверен, что данные, извлеченные из него должен быть извлеченным как bytearray.Но если вам абсолютно необходимо прочитать необработанные байты, то первое, что вам нужно знать, это то, что IBM i (AS / 400, iSeries и т.д.) Изначально является EBCDIC."@" - это контрольный знак, который вам нужно использовать decode('cp037').На кодовой странице 37 (стандартный американский EBCDIC, возможно, потребуется немного скорректировать для разных локалей) пробел равен "\ x40", что совпадает с "@" в ASCII или UTF-8.

Теперь я скажу, что приведенные вами образцы не очень хорошо расшифровываются, так что, к сожалению, это еще не все.Как и комментаторам, мне понадобится больше информации.(Например, я все еще очень озадачен, зачем вам понадобилось смотреть на QAAPFILE$.И, между прочим, я никогда не видел и не пользовался этим файлом.Я много раз использовал pyODBC для подключения к i, и мне никогда не приходилось использовать bytearray.)

Редактировать: Теперь у меня была возможность просмотреть QAAPFILE $ на компьютере, где я работаю, и я могу сказать вам, что вы не найдете в нем удобочитаемых буквенно-цифровых символов.Ну, эта вторая колонка (первая bytearray элемент в кортеже строк) на самом деле читаем при правильном декодировании, но последнее на самом деле нет, даже если смотреть на него непосредственно на сервере, используя собственный интерфейс.На самом деле это просто двоичные данные.Я не могу себе представить, как вы могли бы использовать этот файл.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top