0

我正在使用 iSeries Access ODBC 驱动程序来尝试对 DB2 for 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
4

1 回答 1

2

我不确定您为什么要查看 QAAPFILE$,并且我不确定从中检索到的数据必须bytearray. 但是,如果您绝对必须读取原始字节,那么您首先需要知道的是 IBM i(AS/400、iSeries 等)本身就是 EBCDIC。'@' 是您需要使用的标志decode('cp037')。在代码页 37(标准美国 EBCDIC,您可能需要针对不同的语言环境稍作调整)中,空格是 '\x40',恰好与 ASCII 或 UTF-8 中的 '@' 相同。

现在,我会说你提供的样本解码不好,所以不幸的是故事还有更多。像评论者一样,我需要更多信息。(例如,仍然很困惑为什么您需要查看 QAAPFILE$。而且,为了记录,我从未见过或使用过该文件。我已经多次使用 pyODBC 连接到 i,而且我已经从来没有使用过bytearray。)

编辑:我现在有机会在我工作的机器上查看 QAAPFILE$,我可以告诉你,你不会在其中找到可读的字母数字字符。好吧,第二列(bytearray行元组中的第一个元素)实际上可以通过正确的解码来读取,但最后一列确实不是,甚至没有使用本机接口直接在服务器上查看它。它实际上只是二进制数据。我无法想象你对这个文件有什么用处。

于 2013-11-16T21:15:37.470 回答