我有一個函數應該接收EBCDIC格式的數據並將其轉換爲ASCII。Python和ebcdic解碼(zos 1047)
例如,轉換數據,F1F1F0F0應該給我一個1100的ASCII碼,或者31313030的十六進制ASCII碼。
什麼我發現是這樣的:
def __decode_ASC_EBCDIC_DT(self, data):
if (data[0] == '3'):
#HEX ASCII
dt_ = ''.join(chr(int(data[i:i + 2], 16)) for i in range(0, len(data), 2))
return dt_
elif (data[0] == 'F'):
#HEX EBCDIC
try:
tmp = bytearray(ord(c) for c in data)
dt_ = ''.join(tmp.decode('cp500'))
except:
print('can\'t convert:' + data)
return dt_
但似乎CP500是transfroming我的數據「AAAA」在這種情況下,這是不正確。 (tmp is correct bytearray(b'F1F1F0F0'))
任何想法,還是應該爲EBCDIC製作我自己的字典?
從維基,看着表(例如EBCDIC代碼頁00037) https://en.wikipedia.org/wiki/EBCDIC_037 我得到的字符串是F行+列表示1 = F1 => 1 – Bogdan
你是對有關的ByteArray,那是我不好,但有使用上EBCDIC的十六進制cidecs.decode,或如何轉換HEX EBCDIC以不同的方式到bytearray? – Bogdan
我不知道你在問什麼。我把在作爲例子的ByteArray是HEX EBCDIC字節數組,x'F1F1F0F0' 的,我只是把它們作爲十進制數爲便於舉例。 codecs.decode將它們轉換爲等效的ASCII字符串。 –