我正在使用iSeries Access ODBC驱动程序来尝试运行针对DB2for 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