Pregunta

Estoy usando un controlador ODBC de iSeries Access para intentar ejecutar consultas en DB2 para i.Me gustaría que esta información sea más legible.¿Cómo puedo convertir la información de la matriz de bytes usando Python?Salida de ejemplo a continuación:

>>> 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
¿Fue útil?

Solución

No estoy seguro de por qué estás mirando QAAPFILE$ y no estoy seguro de los datos recuperados de él. debe ser recuperado como bytearray.Pero si es absolutamente necesario leer bytes sin formato, entonces lo primero que necesita saber es que IBM i (AS/400, iSeries, etc.) es EBCDIC de forma nativa.La '@' es un signo revelador que debes usar decode('cp037').En la página de códigos 37 (EBCDIC estadounidense estándar, es posible que deba realizar ajustes ligeramente para diferentes configuraciones regionales), un espacio es '\x40', que resulta ser lo mismo que '@' en ASCII o UTF-8.

Ahora, diré que las muestras que has proporcionado no se decodifican bien, por lo que lamentablemente hay más en la historia.Al igual que los comentaristas, necesitaré más información.(Por ejemplo, todavía estoy realmente desconcertado por qué necesitarías mirar QAAPFILE$.Y, para que conste, nunca he visto ni usado ese archivo.He usado pyODBC muchas veces para conectarme a i, y nunca tuve que usar bytearray.)

Editar: Ahora tuve la oportunidad de mirar QAAPFILE$ en la máquina donde trabajo y puedo decirle que no encontrará caracteres alfanuméricos legibles en él.Bueno, esa segunda columna (la primera bytearray elemento en la tupla de fila) en realidad es legible con la decodificación adecuada, pero el último realmente no lo es, ni siquiera mirándolo directamente en el servidor usando una interfaz nativa.Realmente son solo datos binarios.No puedo imaginar qué uso podría darle a este archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top