私は、16進のEBCDIC形式でデータを受け取ってASCIIに変換する関数を持っています。Pythonとebcdicのデコード(zos 1047)
たとえば、データを変換すると、F1F1F0F0は私にASCIIで1100、または16進ASCIIで31313030を与えます。
私は何を見つけたことはこれです:
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が「AAAA」に私のデータをtransfromingされており、この場合には、これは間違っているようです。 (tmpは正しいbytearray(b'F1F1F0F0 '))
私はEBCDICのための私自身の辞書を作るべきですか?
、テーブルを見て(例えばEBCDICコードページを00037) https://en.wikipedia.org/wiki/EBCDIC_037 私が手の文字列行F +列1の表現= F1 => 1 – Bogdan
あなたはBYTARRAYに関して正しいですが、それは私の悪いことですが、EBCDICの16進数でcidecs.decodeを使用する別の方法、またはHEX ebcdicを変換する方法がありますbytearrayに? – Bogdan
あなたが何を求めているのか分かりません。私が例として挙げたbytearrayは、x'F1F1F0F0 'の16進数のEBCDICバイト配列です。例を簡単にするために10進数で示しています。そして、codecs.decodeはそれらを同等のASCII文字列に変換します。 –