Python3.6:将含SOH的FIX消息字节数组转为带^A的字符串
解决Python 3.6中FIX消息SOH分隔符转^A的问题
核心思路
直接对字节串做精准替换操作:把代表SOH的b'\x01'字节替换为b'^A'字节,再解码成字符串即可。你之前试的repr()会生成带语法标记的字符串(比如开头的b'),ord()仅用于判断单个字符的ASCII码,都不是正确的替换方式。
实现代码
# 从Socket接收的原始FIX字节数据 fix_raw_bytes = b'8=FIX.4.4\x019=65\x0135=0\x0152=20220809-21:37:06.893\x0149=TRADEWEB\x0156=ABFIXREPO\x01347=UTF-8\x0110=045\x01' # 替换SOH分隔符为^A,再解码为UTF-8字符串 formatted_log_str = fix_raw_bytes.replace(b'\x01', b'^A').decode('utf-8') # 写入日志文件(追加模式) with open('fix_message.log', 'a', encoding='utf-8') as log_file: log_file.write(formatted_log_str + '\n')
关键说明
- 字节串的
replace()方法直接操作二进制数据,能精准定位并替换\x01(SOH的十六进制表示) - 解码用UTF-8是因为FIX消息头明确指定了
347=UTF-8,保证编码一致 - 写入文件时指定
encoding='utf-8',避免出现乱码
内容的提问来源于stack exchange,提问作者Yoshiro
相关产品推荐
相关产品推荐

