문제

i용 DB2에 대해 쿼리를 실행하기 위해 iSeries Access ODBC 드라이버를 사용하고 있습니다.이 정보를 더 읽기 쉽게 만들고 싶습니다.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$을 보고 있는 이유가 무엇인지, QAAPFILE$에서 검색된 데이터가 무엇인지 잘 모르겠습니다. ~ 해야 하다 다음으로 검색됩니다. bytearray.그러나 원시 바이트를 반드시 읽어야 하는 경우 가장 먼저 알아야 할 것은 IBM i(AS/400, iSeries 등)가 기본적으로 EBCDIC이라는 것입니다.'@'는 사용해야 하는 표시입니다. decode('cp037').코드 페이지 37(표준 미국 EBCDIC, 다른 로캘에 따라 약간 조정해야 할 수 있음)에서 공백은 '\x40'이며 이는 ASCII 또는 UTF-8의 '@'과 동일합니다.

이제 귀하가 제공한 샘플이 제대로 디코딩되지 않아 불행하게도 이야기가 더 많이 남아 있다고 말씀드리겠습니다.댓글 작성자와 마찬가지로 추가 정보가 필요합니다.(예를 들어 QAAPFILE$을 살펴봐야 하는 이유가 여전히 정말 불명확합니다.그리고 참고로 저는 그 파일을 본 적도 사용한 적도 없습니다.나는 i에 연결하기 위해 pyODBC를 여러 번 사용했지만 한 번도 사용할 필요가 없었습니다. bytearray.)

편집하다: 이제 제가 작업하는 컴퓨터에서 QAAPFILE$을 볼 기회가 생겼고 그 안에는 읽을 수 있는 영숫자 문자가 없을 것이라고 말씀드릴 수 있습니다.음, 두 번째 열(첫 번째 bytearray 행 튜플의 요소)는 실제로 적절한 디코딩을 통해 읽을 수 있지만 마지막 요소는 기본 인터페이스를 사용하여 서버에서 직접 보지도 않고 실제로 읽을 수 없습니다.실제로는 이진 데이터일 뿐입니다.이 파일을 어떤 용도로 사용할 수 있을지 상상할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top