تحويل معلومات صفيف البايت القادمة من استعلامات db2 باستخدام python

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

سؤال

أنا أستخدم برنامج تشغيل iSeries Access ODBC لمحاولة تشغيل الاستعلامات مقابل DB2 لـ i.أود أن أجعل هذه المعلومات تعود أكثر قابلية للقراءة.كيف يمكنني تحويل معلومات مجموعة البايت باستخدام بيثون؟مثال الإخراج أدناه:

>>> 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